dis_rs/common/data_query_r/
writer.rs

1use crate::common::{Serialize, SerializePdu, SupportedVersion};
2use crate::data_query_r::model::DataQueryR;
3use bytes::{BufMut, BytesMut};
4
5impl SerializePdu for DataQueryR {
6    fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
7        let originating_bytes = self.originating_id.serialize(buf);
8        let receiving_bytes = self.receiving_id.serialize(buf);
9        buf.put_u8(self.required_reliability_service.into());
10        buf.put_u8(0u8);
11        buf.put_u16(0u16);
12        buf.put_u32(self.request_id);
13        buf.put_u32(self.time_interval);
14        buf.put_u32(self.fixed_datum_records.len() as u32);
15        buf.put_u32(self.variable_datum_records.len() as u32);
16        let fixed_datum_bytes = self
17            .fixed_datum_records
18            .iter()
19            .map(|datum_id| {
20                buf.put_u32((*datum_id).into());
21                4
22            })
23            .sum::<u16>();
24        let variable_datum_bytes = self
25            .variable_datum_records
26            .iter()
27            .map(|datum_id| {
28                buf.put_u32((*datum_id).into());
29                4
30            })
31            .sum::<u16>();
32
33        originating_bytes + receiving_bytes + 20 + fixed_datum_bytes + variable_datum_bytes
34    }
35}