dis_rs/common/receiver/
model.rs1use crate::common::model::{EntityId, PduBody};
2use crate::common::{BodyInfo, Interaction};
3use crate::enumerations::{PduType, ReceiverState};
4use crate::receiver::builder::ReceiverBuilder;
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8const RECEIVER_BODY_LENGTH: u16 = 24;
9
10#[derive(Clone, Debug, Default, PartialEq)]
11#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
12pub struct Receiver {
13 pub radio_reference_id: EntityId,
14 pub radio_number: u16,
15 pub receiver_state: ReceiverState,
16 pub received_power: f32,
17 pub transmitter_radio_reference_id: EntityId,
18 pub transmitter_radio_number: u16,
19}
20
21impl Receiver {
22 #[must_use]
23 pub fn builder() -> ReceiverBuilder {
24 ReceiverBuilder::new()
25 }
26
27 #[must_use]
28 pub fn into_builder(self) -> ReceiverBuilder {
29 ReceiverBuilder::new_from_body(self)
30 }
31
32 #[must_use]
33 pub fn into_pdu_body(self) -> PduBody {
34 PduBody::Receiver(self)
35 }
36}
37
38impl BodyInfo for Receiver {
39 fn body_length(&self) -> u16 {
40 RECEIVER_BODY_LENGTH
41 }
42
43 fn body_type(&self) -> PduType {
44 PduType::Receiver
45 }
46}
47
48impl Interaction for Receiver {
49 fn originator(&self) -> Option<&EntityId> {
50 Some(&self.transmitter_radio_reference_id)
51 }
52
53 fn receiver(&self) -> Option<&EntityId> {
54 Some(&self.radio_reference_id)
55 }
56}