dis-rs 0.13.0

An implementation of the Distributed Interactive Simulation protocol (IEEE-1278.1) in Rust. This main crate contains PDU implementations and facilities to read/write PDUs from Rust data structures to the wire format and vice versa. It supports versions 6 and 7 of the protocol.
Documentation
use crate::constants::FOUR_OCTETS;
use crate::record_query_r::model::{RecordQueryR, RecordQuerySpecification};
use crate::{Serialize, SerializePdu, SupportedVersion};
use bytes::{BufMut, BytesMut};

impl SerializePdu for RecordQueryR {
    fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
        let origination_id_bytes = self.originating_id.serialize(buf);
        let receiving_id_bytes = self.receiving_id.serialize(buf);
        buf.put_u32(self.request_id);
        buf.put_u8(self.required_reliability_service.into());
        buf.put_u8(0u8);
        buf.put_u16(self.event_type.into());
        buf.put_u32(self.time.raw_timestamp);
        let record_query_specification = self.record_query_specification.serialize(buf);

        origination_id_bytes + receiving_id_bytes + 12 + record_query_specification
    }
}

impl Serialize for RecordQuerySpecification {
    fn serialize(&self, buf: &mut BytesMut) -> u16 {
        buf.put_u32(self.record_ids.len() as u32);
        let record_bytes = self
            .record_ids
            .iter()
            .map(|record| {
                buf.put_u32(u32::from(*record));
                FOUR_OCTETS as u16
            })
            .sum::<u16>();

        FOUR_OCTETS as u16 + record_bytes
    }
}