dis_rs/common/record_query_r/
writer.rs1use 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}