bgpkit_parser/models/bgp/attributes/
origin.rs1use num_enum::{IntoPrimitive, TryFromPrimitive};
2use std::fmt::{Display, Formatter};
3
4#[allow(non_camel_case_types)]
5#[derive(Debug, TryFromPrimitive, IntoPrimitive, PartialEq, Eq, Hash, Copy, Clone)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7#[repr(u8)]
8pub enum Origin {
9 IGP = 0,
11 EGP = 1,
14 INCOMPLETE = 2,
15}
16
17impl Display for Origin {
18 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
19 match self {
20 Origin::IGP => write!(f, "IGP"),
21 Origin::EGP => write!(f, "EGP"),
22 Origin::INCOMPLETE => write!(f, "INCOMPLETE"),
23 }
24 }
25}
26
27#[cfg(test)]
28mod tests {
29 use super::*;
30
31 #[test]
32 #[cfg(feature = "serde")]
33 fn test_serde() {
34 use serde_json;
35
36 let origin = Origin::IGP;
37 let serialized = serde_json::to_string(&origin).unwrap();
38 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
39 assert_eq!(origin, deserialized);
40
41 let origin = Origin::EGP;
42 let serialized = serde_json::to_string(&origin).unwrap();
43 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
44 assert_eq!(origin, deserialized);
45
46 let origin = Origin::INCOMPLETE;
47 let serialized = serde_json::to_string(&origin).unwrap();
48 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
49 assert_eq!(origin, deserialized);
50 }
51
52 #[test]
53 fn test_display() {
54 let origin = Origin::IGP;
55 assert_eq!(format!("{origin}"), "IGP");
56 let origin = Origin::EGP;
57 assert_eq!(format!("{origin}"), "EGP");
58 let origin = Origin::INCOMPLETE;
59 assert_eq!(format!("{origin}"), "INCOMPLETE");
60 }
61}