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#[cfg_attr(feature = "ts-rs", derive(ts_rs::TS), ts(export))]
8#[repr(u8)]
9pub enum Origin {
10 IGP = 0,
12 EGP = 1,
15 INCOMPLETE = 2,
16}
17
18impl Display for Origin {
19 fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
20 match self {
21 Origin::IGP => write!(f, "IGP"),
22 Origin::EGP => write!(f, "EGP"),
23 Origin::INCOMPLETE => write!(f, "INCOMPLETE"),
24 }
25 }
26}
27
28#[cfg(test)]
29mod tests {
30 use super::*;
31
32 #[test]
33 #[cfg(feature = "serde")]
34 fn test_serde() {
35 use serde_json;
36
37 let origin = Origin::IGP;
38 let serialized = serde_json::to_string(&origin).unwrap();
39 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
40 assert_eq!(origin, deserialized);
41
42 let origin = Origin::EGP;
43 let serialized = serde_json::to_string(&origin).unwrap();
44 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
45 assert_eq!(origin, deserialized);
46
47 let origin = Origin::INCOMPLETE;
48 let serialized = serde_json::to_string(&origin).unwrap();
49 let deserialized: Origin = serde_json::from_str(&serialized).unwrap();
50 assert_eq!(origin, deserialized);
51 }
52
53 #[test]
54 fn test_display() {
55 let origin = Origin::IGP;
56 assert_eq!(format!("{origin}"), "IGP");
57 let origin = Origin::EGP;
58 assert_eq!(format!("{origin}"), "EGP");
59 let origin = Origin::INCOMPLETE;
60 assert_eq!(format!("{origin}"), "INCOMPLETE");
61 }
62}