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::sees::model::{PropulsionSystemData, VectoringNozzleSystemData, SEES};
use crate::{Serialize, SerializePdu, SupportedVersion};
use bytes::{BufMut, BytesMut};

impl SerializePdu for SEES {
    fn serialize_pdu(&self, _version: SupportedVersion, buf: &mut BytesMut) -> u16 {
        let originating_bytes = self.originating_entity_id.serialize(buf);
        buf.put_u16(self.infrared_signature_representation_index);
        buf.put_u16(self.acoustic_signature_representation_index);
        buf.put_u16(self.radar_cross_section_representation_index);
        buf.put_u16(self.propulsion_systems.len() as u16);
        buf.put_u16(self.vectoring_nozzle_systems.len() as u16);

        let propulsion_system_bytes = self
            .propulsion_systems
            .iter()
            .map(|system| system.serialize(buf))
            .sum::<u16>();
        let vectoring_nozzle_bytes = self
            .vectoring_nozzle_systems
            .iter()
            .map(|system| system.serialize(buf))
            .sum::<u16>();

        originating_bytes + 10 + propulsion_system_bytes + vectoring_nozzle_bytes
    }
}

impl Serialize for PropulsionSystemData {
    fn serialize(&self, buf: &mut BytesMut) -> u16 {
        buf.put_f32(self.power_setting);
        buf.put_f32(self.engine_rpm);

        8
    }
}

impl Serialize for VectoringNozzleSystemData {
    fn serialize(&self, buf: &mut BytesMut) -> u16 {
        buf.put_f32(self.horizontal_deflection_angle);
        buf.put_f32(self.vertical_deflection_angle);

        8
    }
}