dis_rs/common/data_r/
mod.rs1pub 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::{EntityId, FixedDatum, Pdu, PduHeader, VariableDatum};
10 use crate::common::parser::parse_pdu;
11 use crate::data_r::model::DataR;
12 use crate::enumerations::{PduType, RequiredReliabilityService, VariableRecordType};
13 use bytes::BytesMut;
14
15 #[test]
16 fn data_r_internal_consistency() {
17 let header = PduHeader::new_v6(1, PduType::DataR);
18
19 let body = DataR::builder()
20 .with_origination_id(EntityId::new(10, 10, 10))
21 .with_receiving_id(EntityId::new(20, 20, 20))
22 .with_request_id(5)
23 .with_required_reliability_service(RequiredReliabilityService::Acknowledged)
24 .with_fixed_datums(vec![FixedDatum::new(VariableRecordType::Azimuth_52340, 45)])
25 .with_variable_datums(vec![VariableDatum::new(
26 VariableRecordType::Azimuth_52340,
27 vec![1, 2, 3, 4, 5, 6, 7],
28 )])
29 .build()
30 .into_pdu_body();
31 let original_pdu =
32 Pdu::finalize_from_parts(header, body, DisTimeStamp::new_absolute_from_secs(100));
33 let pdu_length = original_pdu.header.pdu_length;
34 let original_length = original_pdu.pdu_length();
35
36 let mut buf = BytesMut::with_capacity(pdu_length as usize);
37
38 let serialized_length = original_pdu.serialize(&mut buf).unwrap();
39
40 assert_eq!(original_length, serialized_length);
41
42 let parsed = parse_pdu(&buf);
43 match parsed {
44 Ok(ref pdu) => {
45 assert_eq!(&original_pdu, pdu);
46 }
47 Err(ref err) => {
48 panic!("Parse error: {err}");
49 }
50 }
51 }
52}