dis_rs/common/set_data_r/
mod.rs

1pub mod builder;
2pub mod model;
3pub mod parser;
4pub mod writer;
5
6#[cfg(test)]
7mod tests {
8    use crate::common::model::DisTimeStamp;
9    use crate::common::model::{Pdu, PduHeader};
10    use crate::common::parser::parse_pdu;
11    use crate::enumerations::{PduType, RequiredReliabilityService, VariableRecordType};
12    use crate::model::{EntityId, FixedDatum, VariableDatum};
13    use crate::set_data_r::model::SetDataR;
14    use bytes::BytesMut;
15
16    #[test]
17    fn set_data_r_internal_consistency() {
18        let header = PduHeader::new_v6(1, PduType::SetDataR);
19
20        let body = SetDataR::builder()
21            .with_origination_id(EntityId::new(10, 10, 10))
22            .with_receiving_id(EntityId::new(20, 20, 20))
23            .with_required_reliability_service(RequiredReliabilityService::Unacknowledged)
24            .with_request_id(5)
25            .with_fixed_datums(vec![FixedDatum::new(
26                VariableRecordType::_7_62mm_Quantity_24010,
27                100,
28            )])
29            .with_variable_datums(vec![VariableDatum::new(
30                VariableRecordType::Country_11130,
31                vec![0x1, 0x2, 0x3],
32            )])
33            .build()
34            .into_pdu_body();
35        let original_pdu =
36            Pdu::finalize_from_parts(header, body, DisTimeStamp::new_absolute_from_secs(100));
37        let pdu_length = original_pdu.header.pdu_length;
38        let original_length = original_pdu.pdu_length();
39
40        let mut buf = BytesMut::with_capacity(pdu_length as usize);
41
42        let serialized_length = original_pdu.serialize(&mut buf).unwrap();
43
44        assert_eq!(original_length, serialized_length);
45
46        let parsed = parse_pdu(&buf);
47        match parsed {
48            Ok(ref pdu) => {
49                assert_eq!(&original_pdu, pdu);
50            }
51            Err(ref err) => {
52                panic!("Parse error: {err}");
53            }
54        }
55    }
56}