dis_rs/common/designator/
model.rs

1use crate::common::designator::builder::DesignatorBuilder;
2use crate::common::model::{EntityId, Location, PduBody, VectorF32};
3use crate::common::{BodyInfo, Interaction};
4use crate::enumerations::PduType;
5use crate::enumerations::{DeadReckoningAlgorithm, DesignatorCode, DesignatorSystemName};
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9pub const DESIGNATOR_BODY_LENGTH: u16 = 76;
10
11/// 5.7.4 Designator PDU
12///
13/// 7.6.3 Designator PDU
14#[derive(Clone, Debug, Default, PartialEq)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct Designator {
17    pub designating_entity_id: EntityId,
18    pub system_name: DesignatorSystemName,
19    pub designated_entity_id: EntityId,
20    pub code: DesignatorCode,
21    pub power: f32,
22    pub wavelength: f32,
23    pub spot_wrt_designated_entity: VectorF32,
24    pub spot_location: Location,
25    pub dead_reckoning_algorithm: DeadReckoningAlgorithm,
26    pub linear_acceleration: VectorF32,
27}
28
29impl Designator {
30    #[must_use]
31    pub fn builder() -> DesignatorBuilder {
32        DesignatorBuilder::new()
33    }
34
35    #[must_use]
36    pub fn into_builder(self) -> DesignatorBuilder {
37        DesignatorBuilder::new_from_body(self)
38    }
39
40    #[must_use]
41    pub fn into_pdu_body(self) -> PduBody {
42        PduBody::Designator(self)
43    }
44}
45
46impl BodyInfo for Designator {
47    fn body_length(&self) -> u16 {
48        DESIGNATOR_BODY_LENGTH
49    }
50
51    fn body_type(&self) -> PduType {
52        PduType::Designator
53    }
54}
55
56impl Interaction for Designator {
57    fn originator(&self) -> Option<&EntityId> {
58        Some(&self.designating_entity_id)
59    }
60
61    fn receiver(&self) -> Option<&EntityId> {
62        Some(&self.designated_entity_id)
63    }
64}