bgpkit_parser/models/mrt/
table_dump.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
//! MRT table dump version 1 and 2 structs
use crate::models::*;
use std::net::IpAddr;

/// TableDump message version 1
#[derive(Debug, Clone, PartialEq, Eq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct TableDumpMessage {
    pub view_number: u16,
    pub sequence_number: u16,
    pub prefix: NetworkPrefix,
    pub status: u8,
    pub originated_time: u64,
    pub peer_address: IpAddr,
    pub peer_asn: Asn,
    pub attributes: Attributes,
}

#[cfg(test)]
mod tests {
    use super::*;
    use std::str::FromStr;

    #[test]
    fn create_table_dump_message() {
        let table_dump_message = TableDumpMessage {
            view_number: 1,
            sequence_number: 1,
            prefix: NetworkPrefix::from_str("192.0.2.0/24").unwrap(),
            status: 1,
            originated_time: 1,
            peer_address: IpAddr::from_str("192.0.2.1").unwrap(),
            peer_asn: Asn::new_32bit(1),
            attributes: Attributes::default(),
        };

        assert_eq!(table_dump_message.view_number, 1);
        assert_eq!(table_dump_message.sequence_number, 1);

        let cloned = table_dump_message.clone();
        assert_eq!(cloned, table_dump_message);
    }

    #[test]
    #[cfg(feature = "serde")]
    fn serialize_and_deserialize_table_dump_message() {
        use serde_json;

        let table_dump_message = TableDumpMessage {
            view_number: 1,
            sequence_number: 1,
            prefix: NetworkPrefix::from_str("10.0.2.0/24").unwrap(),
            status: 1,
            originated_time: 1,
            peer_address: IpAddr::from_str("10.0.2.1").unwrap(),
            peer_asn: Asn::new_32bit(1),
            attributes: Attributes::default(),
        };

        let serialized = serde_json::to_string(&table_dump_message).unwrap();
        let deserialized: TableDumpMessage = serde_json::from_str(&serialized).unwrap();

        assert_eq!(table_dump_message, deserialized);
    }
}