ya_relay_stack/
protocol.rs

1use std::convert::TryFrom;
2
3/// IP sub-protocol identifiers
4#[allow(unused)]
5#[derive(Clone, Copy, Debug, Hash, Eq, PartialEq, Ord, PartialOrd, num_derive::FromPrimitive)]
6#[non_exhaustive]
7#[repr(u8)]
8pub enum Protocol {
9    HopByHop = 0,
10    Icmp = 1,
11    Igmp = 2,
12    Tcp = 6,
13    Egp = 8,
14    Igp = 9,
15    Udp = 17,
16    Rdp = 27,
17    Dccp = 33,
18    Ipv6Tun = 41,
19    Sdrp = 42,
20    Ipv6Route = 43,
21    Ipv6Frag = 44,
22    Ipv6Icmp = 58,
23    Ipv6NoNxt = 59,
24    Ipv6Opts = 60,
25    Ipcv = 71,
26    IpIp = 94,
27    IpComp = 108,
28    Smp = 121,
29    Sctp = 132,
30    Ethernet = 143,
31    None,
32}
33
34impl TryFrom<u8> for Protocol {
35    type Error = u8;
36
37    fn try_from(value: u8) -> Result<Self, Self::Error> {
38        match num_traits::FromPrimitive::from_u8(value) {
39            Some(protocol) => Ok(protocol),
40            None => Err(value),
41        }
42    }
43}
44
45impl std::fmt::Display for Protocol {
46    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
47        write!(f, "{:?}", self)
48    }
49}