dis_rs/common/designator/
model.rs1use 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#[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}