| /// Sources of length limiting values (e.g. "ipv6 payload length field"). | |
| #[derive(Copy, Clone, Debug, Eq, PartialEq, Ord, PartialOrd, Hash)] | |
| pub enum LenSource { | |
| /// Limiting length was the slice length (we don't know what determined | |
| /// that one originally). | |
| Slice, | |
| /// Length | |
| Ipv4HeaderTotalLen, | |
| /// Error occurred in the IPv6 layer. | |
| Ipv6HeaderPayloadLen, | |
| /// Error occurred while decoding an UDP header. | |
| UdpHeaderLen, | |
| /// Error occurred while decoding a TCP header. | |
| TcpHeaderLen, | |
| } | |
| #[cfg(test)] | |
| mod test { | |
| use super::LenSource::*; | |
| use alloc::format; | |
| use std::{ | |
| cmp::Ordering, | |
| collections::hash_map::DefaultHasher, | |
| hash::{Hash, Hasher}, | |
| }; | |
| #[test] | |
| fn debug() { | |
| assert_eq!("Slice", format!("{:?}", Slice)); | |
| } | |
| #[test] | |
| fn clone_eq_hash_ord() { | |
| let layer = Slice; | |
| assert_eq!(layer, layer.clone()); | |
| let hash_a = { | |
| let mut hasher = DefaultHasher::new(); | |
| layer.hash(&mut hasher); | |
| hasher.finish() | |
| }; | |
| let hash_b = { | |
| let mut hasher = DefaultHasher::new(); | |
| layer.clone().hash(&mut hasher); | |
| hasher.finish() | |
| }; | |
| assert_eq!(hash_a, hash_b); | |
| assert_eq!(Ordering::Equal, layer.cmp(&layer)); | |
| assert_eq!(Some(Ordering::Equal), layer.partial_cmp(&layer)); | |
| } | |
| } |