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::enumerations::{
    ActiveInterrogationIndicator, CoupledExtensionIndicator, DetonationTypeIndicator,
    FireTypeIndicator, IffSimulationMode, IntercomAttachedIndicator, LvcIndicator,
    RadioAttachedIndicator, TransferredEntityIndicator,
};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};

/// 5.2.7 PDU status record
///
/// 6.2.67 PDU Status record
#[derive(Copy, Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct PduStatus {
    pub transferred_entity_indicator: Option<TransferredEntityIndicator>,
    pub lvc_indicator: Option<LvcIndicator>,
    pub coupled_extension_indicator: Option<CoupledExtensionIndicator>,
    pub fire_type_indicator: Option<FireTypeIndicator>,
    pub detonation_type_indicator: Option<DetonationTypeIndicator>,
    pub radio_attached_indicator: Option<RadioAttachedIndicator>,
    pub intercom_attached_indicator: Option<IntercomAttachedIndicator>,
    pub iff_simulation_mode: Option<IffSimulationMode>,
    pub active_interrogation_indicator: Option<ActiveInterrogationIndicator>,
}

#[allow(clippy::derivable_impls)]
impl Default for PduStatus {
    fn default() -> Self {
        PduStatus {
            transferred_entity_indicator: None,
            lvc_indicator: None,
            coupled_extension_indicator: None,
            fire_type_indicator: None,
            detonation_type_indicator: None,
            radio_attached_indicator: None,
            intercom_attached_indicator: None,
            iff_simulation_mode: None,
            active_interrogation_indicator: None,
        }
    }
}

impl PduStatus {
    #[must_use]
    pub fn with_transferred_entity_indicator(mut self, tei: TransferredEntityIndicator) -> Self {
        self.transferred_entity_indicator = Some(tei);
        self
    }

    #[must_use]
    pub fn with_lvc_indicator(mut self, lvc: LvcIndicator) -> Self {
        self.lvc_indicator = Some(lvc);
        self
    }

    #[must_use]
    pub fn with_coupled_extension_indicator(mut self, cei: CoupledExtensionIndicator) -> Self {
        self.coupled_extension_indicator = Some(cei);
        self
    }

    #[must_use]
    pub fn with_fire_type_indicator(mut self, fti: FireTypeIndicator) -> Self {
        self.fire_type_indicator = Some(fti);
        self
    }

    #[must_use]
    pub fn with_detonation_type_indicator(mut self, dti: DetonationTypeIndicator) -> Self {
        self.detonation_type_indicator = Some(dti);
        self
    }

    #[must_use]
    pub fn with_radio_attached_indicator(mut self, rai: RadioAttachedIndicator) -> Self {
        self.radio_attached_indicator = Some(rai);
        self
    }

    #[must_use]
    pub fn with_intercom_attached_indicator(mut self, iai: IntercomAttachedIndicator) -> Self {
        self.intercom_attached_indicator = Some(iai);
        self
    }

    #[must_use]
    pub fn with_iff_simulation_mode(mut self, ism: IffSimulationMode) -> Self {
        self.iff_simulation_mode = Some(ism);
        self
    }

    #[must_use]
    pub fn with_active_interrogation_indicator(
        mut self,
        aii: ActiveInterrogationIndicator,
    ) -> Self {
        self.active_interrogation_indicator = Some(aii);
        self
    }
}