bgpkit_parser/models/network/
afi.rs1use num_enum::{IntoPrimitive, TryFromPrimitive};
2use std::net::IpAddr;
3
4#[derive(Debug, PartialEq, TryFromPrimitive, IntoPrimitive, Clone, Copy, Eq, Hash)]
8#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
9#[repr(u16)]
10pub enum Afi {
11 Ipv4 = 1,
12 Ipv6 = 2,
13}
14
15impl From<IpAddr> for Afi {
16 #[inline]
17 fn from(value: IpAddr) -> Self {
18 match value {
19 IpAddr::V4(_) => Afi::Ipv4,
20 IpAddr::V6(_) => Afi::Ipv6,
21 }
22 }
23}
24
25#[derive(Debug, PartialEq, TryFromPrimitive, IntoPrimitive, Clone, Copy, Eq, Hash)]
29#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
30#[repr(u8)]
31pub enum Safi {
32 Unicast = 1,
33 Multicast = 2,
34 UnicastMulticast = 3,
35}
36
37#[cfg(test)]
38mod tests {
39 use super::*;
40
41 #[test]
42 fn test_afi_from() {
43 assert_eq!(
44 Afi::from(IpAddr::V4(std::net::Ipv4Addr::new(127, 0, 0, 1))),
45 Afi::Ipv4
46 );
47 assert_eq!(
48 Afi::from(IpAddr::V6(std::net::Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1))),
49 Afi::Ipv6
50 );
51 }
52
53 #[test]
54 fn test_afi_safi_repr() {
55 assert_eq!(Afi::Ipv4 as u16, 1);
56 assert_eq!(Afi::Ipv6 as u16, 2);
57
58 assert_eq!(Safi::Unicast as u8, 1);
59 assert_eq!(Safi::Multicast as u8, 2);
60 assert_eq!(Safi::UnicastMulticast as u8, 3);
61 }
62
63 #[test]
64 #[cfg(feature = "serde")]
65 fn test_afi_safi_serde() {
66 let afi = Afi::Ipv4;
67 let serialized = serde_json::to_string(&afi).unwrap();
68 assert_eq!(serialized, "\"Ipv4\"");
69 let deserialized: Afi = serde_json::from_str(&serialized).unwrap();
70 assert_eq!(deserialized, afi);
71
72 let afi = Afi::Ipv6;
73 let serialized = serde_json::to_string(&afi).unwrap();
74 assert_eq!(serialized, "\"Ipv6\"");
75 let deserialized: Afi = serde_json::from_str(&serialized).unwrap();
76 assert_eq!(deserialized, afi);
77
78 let safi = Safi::Unicast;
79 let serialized = serde_json::to_string(&safi).unwrap();
80 assert_eq!(serialized, "\"Unicast\"");
81 let deserialized: Safi = serde_json::from_str(&serialized).unwrap();
82 assert_eq!(deserialized, safi);
83
84 let safi = Safi::Multicast;
85 let serialized = serde_json::to_string(&safi).unwrap();
86 assert_eq!(serialized, "\"Multicast\"");
87 let deserialized: Safi = serde_json::from_str(&serialized).unwrap();
88 assert_eq!(deserialized, safi);
89
90 let safi = Safi::UnicastMulticast;
91 let serialized = serde_json::to_string(&safi).unwrap();
92 assert_eq!(serialized, "\"UnicastMulticast\"");
93 let deserialized: Safi = serde_json::from_str(&serialized).unwrap();
94 assert_eq!(deserialized, safi);
95 }
96}