1 use crate::*; 2 3 /// Slice containing UDP, TCP, ICMP or ICMPv4 header & payload. 4 #[derive(Clone, Debug, Eq, PartialEq)] 5 pub enum TransportSlice<'a> { 6 /// A slice containing an Icmp4 header & payload. 7 Icmpv4(Icmpv4Slice<'a>), 8 9 /// A slice containing an Icmp6 header & payload. 10 Icmpv6(Icmpv6Slice<'a>), 11 12 /// A slice containing an UDP header & payload. 13 Udp(UdpSlice<'a>), 14 15 /// A slice containing a TCP header & payload. 16 Tcp(TcpSlice<'a>), 17 } 18 19 #[cfg(test)] 20 mod test { 21 use super::*; 22 use alloc::{format, vec::Vec}; 23 24 #[test] debug_clone_eq()25 fn debug_clone_eq() { 26 // udp 27 { 28 let header: UdpHeader = Default::default(); 29 let raw = header.to_bytes(); 30 let u = UdpSlice::from_slice(&raw).unwrap(); 31 let slice = TransportSlice::Udp(u.clone()); 32 33 // clone & eq 34 assert_eq!(slice.clone(), slice); 35 36 // debug 37 assert_eq!(format!("{:?}", slice), format!("Udp({:?})", u)); 38 } 39 // tcp 40 { 41 let header: TcpHeader = Default::default(); 42 let buffer = { 43 let mut buffer = Vec::with_capacity(header.header_len() as usize); 44 header.write(&mut buffer).unwrap(); 45 buffer 46 }; 47 let t = TcpSlice::from_slice(&buffer).unwrap(); 48 let slice = TransportSlice::Tcp(t.clone()); 49 50 // clone & eq 51 assert_eq!(slice.clone(), slice); 52 53 // debug 54 assert_eq!(format!("{:?}", slice), format!("Tcp({:?})", t)); 55 } 56 } 57 } 58