dis_rs/common/record_query_r/
writer.rs

1use crate::constants::FOUR_OCTETS;
2use crate::record_query_r::model::{RecordQueryR, RecordQuerySpecification};
3use crate::{Serialize, SerializePdu, SupportedVersion};
4use bytes::{BufMut, BytesMut};
5
6impl SerializePdu for RecordQueryR {
7    fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
8        let origination_id_bytes = self.originating_id.serialize(buf);
9        let receiving_id_bytes = self.receiving_id.serialize(buf);
10        buf.put_u32(self.request_id);
11        buf.put_u8(self.required_reliability_service.into());
12        buf.put_u8(0u8);
13        buf.put_u16(self.event_type.into());
14        buf.put_u32(self.time.raw_timestamp);
15        let record_query_specification = self.record_query_specification.serialize(buf);
16
17        origination_id_bytes + receiving_id_bytes + 12 + record_query_specification
18    }
19}
20
21impl Serialize for RecordQuerySpecification {
22    fn serialize(&self, buf: &mut BytesMut) -> u16 {
23        buf.put_u32(self.record_ids.len() as u32);
24        let record_bytes = self
25            .record_ids
26            .iter()
27            .map(|record| {
28                buf.put_u32(u32::from(*record));
29                FOUR_OCTETS as u16
30            })
31            .sum::<u16>();
32
33        FOUR_OCTETS as u16 + record_bytes
34    }
35}