use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum PacketPropType {
Magic,
Major,
Minor,
ThisZone,
SigFigs,
Snaplen,
LinkType,
Sec,
USec,
Caplen,
Wirelen,
Payload,
Eth,
Src,
Dst,
EtherType,
Vlan,
Id,
Priority,
Dei,
Ipv4,
Version,
Ihl,
TotalLength,
Dscp,
Ecn,
Flags,
FragmentOffset,
Ttl,
Protocol,
Checksum,
Udp,
SrcPort,
DstPort,
Length,
Tcp,
Sequence,
Ack,
DataOffset,
WindowSize,
Urgent,
Ipv6,
TrafficClass,
FlowLabel,
NextHeader,
HopLimit,
#[default]
Invalid,
}
impl From<u8> for PacketPropType {
fn from(code: u8) -> Self {
match code {
0 => Self::Magic,
1 => Self::Major,
2 => Self::Minor,
3 => Self::ThisZone,
4 => Self::SigFigs,
5 => Self::Snaplen,
6 => Self::LinkType,
7 => Self::Sec,
8 => Self::USec,
9 => Self::Caplen,
10 => Self::Wirelen,
11 => Self::Payload,
12 => Self::Eth,
13 => Self::Src,
14 => Self::Dst,
15 => Self::EtherType,
16 => Self::Vlan,
17 => Self::Id,
18 => Self::Priority,
19 => Self::Dei,
20 => Self::Ipv4,
21 => Self::Version,
22 => Self::Ihl,
23 => Self::TotalLength,
24 => Self::Dscp,
25 => Self::Ecn,
26 => Self::Flags,
27 => Self::FragmentOffset,
28 => Self::Ttl,
29 => Self::Protocol,
30 => Self::Checksum,
31 => Self::Udp,
32 => Self::SrcPort,
33 => Self::DstPort,
34 => Self::Length,
35 => Self::Tcp,
36 => Self::Sequence,
37 => Self::Ack,
38 => Self::DataOffset,
39 => Self::WindowSize,
40 => Self::Urgent,
41 => Self::Ipv6,
42 => Self::TrafficClass,
43 => Self::FlowLabel,
44 => Self::NextHeader,
45 => Self::HopLimit,
_ => Self::Invalid,
}
}
}
impl From<PacketPropType> for u8 {
fn from(code: PacketPropType) -> Self {
code as u8
}
}
impl fmt::Display for PacketPropType {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
let string_representation = match self {
PacketPropType::Magic => "magic",
PacketPropType::Major => "major",
PacketPropType::Minor => "minor",
PacketPropType::ThisZone => "thiszone",
PacketPropType::SigFigs => "sigfigs",
PacketPropType::Snaplen => "snaplen",
PacketPropType::LinkType => "linktype",
PacketPropType::Sec => "sec",
PacketPropType::USec => "usec",
PacketPropType::Caplen => "caplen",
PacketPropType::Wirelen => "wirelen",
PacketPropType::Payload => "payload",
PacketPropType::Eth => "eth",
PacketPropType::Src => "src",
PacketPropType::Dst => "dst",
PacketPropType::EtherType => "type",
PacketPropType::Vlan => "vlan",
PacketPropType::Id => "id",
PacketPropType::Priority => "priority",
PacketPropType::Dei => "dei",
PacketPropType::Ipv4 => "ipv4",
PacketPropType::Version => "version",
PacketPropType::Ihl => "ihl",
PacketPropType::TotalLength => "totlen",
PacketPropType::Dscp => "dscp",
PacketPropType::Ecn => "ecn",
PacketPropType::Flags => "flags",
PacketPropType::FragmentOffset => "fragoff",
PacketPropType::Ttl => "ttl",
PacketPropType::Protocol => "proto",
PacketPropType::Checksum => "checksum",
PacketPropType::Udp => "udp",
PacketPropType::SrcPort => "srcport",
PacketPropType::DstPort => "dstport",
PacketPropType::Length => "len",
PacketPropType::Tcp => "tcp",
PacketPropType::Sequence => "seq",
PacketPropType::Ack => "ack",
PacketPropType::DataOffset => "dataoff",
PacketPropType::WindowSize => "winsize",
PacketPropType::Urgent => "urgent",
PacketPropType::Ipv6 => "ipv6",
PacketPropType::TrafficClass => "trafficclass",
PacketPropType::FlowLabel => "flowlabel",
PacketPropType::NextHeader => "nextheader",
PacketPropType::HopLimit => "hoplimit",
PacketPropType::Invalid => "invalid",
};
write!(f, "{}", string_representation)
}
}