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::action_response_r::model::ActionResponseR;
use crate::common::{Serialize, SerializePdu, SupportedVersion};
use bytes::{BufMut, BytesMut};

impl SerializePdu for ActionResponseR {
    fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
        let originating_bytes = self.originating_id.serialize(buf);
        let receiving_bytes = self.receiving_id.serialize(buf);
        buf.put_u32(self.request_id);
        buf.put_u32(self.request_status.into());
        buf.put_u32(self.fixed_datum_records.len() as u32);
        buf.put_u32(self.variable_datum_records.len() as u32);
        let fixed_datum_bytes = self
            .fixed_datum_records
            .iter()
            .map(|datum| datum.serialize(buf))
            .sum::<u16>();
        let variable_datum_bytes = self
            .variable_datum_records
            .iter()
            .map(|datum| datum.serialize(buf))
            .sum::<u16>();

        originating_bytes + receiving_bytes + 16 + fixed_datum_bytes + variable_datum_bytes
    }
}