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