dis_rs/common/data_query/
writer.rs1use crate::common::data_query::model::DataQuery;
2use crate::common::{Serialize, SerializePdu, SupportedVersion};
3use bytes::{BufMut, BytesMut};
4
5impl SerializePdu for DataQuery {
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_u32(self.request_id);
10        buf.put_u32(self.time_interval);
11        buf.put_u32(self.fixed_datum_records.len() as u32);
12        buf.put_u32(self.variable_datum_records.len() as u32);
13        let fixed_datum_bytes = self
14            .fixed_datum_records
15            .iter()
16            .map(|datum_id| {
17                buf.put_u32((*datum_id).into());
18                4
19            })
20            .sum::<u16>();
21        let variable_datum_bytes = self
22            .variable_datum_records
23            .iter()
24            .map(|datum_id| {
25                buf.put_u32((*datum_id).into());
26                4
27            })
28            .sum::<u16>();
29
30        originating_bytes + receiving_bytes + 16 + fixed_datum_bytes + variable_datum_bytes
31    }
32}