dis_rs/common/acknowledge/
model.rs

1use crate::common::acknowledge::builder::AcknowledgeBuilder;
2use crate::common::model::{EntityId, PduBody};
3use crate::common::{BodyInfo, Interaction};
4use crate::enumerations::{AcknowledgeFlag, PduType, ResponseFlag};
5#[cfg(feature = "serde")]
6use serde::{Deserialize, Serialize};
7
8const ACKNOWLEDGE_BODY_LENGTH: u16 = 20;
9
10/// 5.6.5.6 Acknowledge PDU
11///
12/// 7.5.6 Acknowledge PDU
13#[derive(Clone, Debug, Default, PartialEq)]
14#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
15pub struct Acknowledge {
16    pub originating_id: EntityId,
17    pub receiving_id: EntityId,
18    pub acknowledge_flag: AcknowledgeFlag,
19    pub response_flag: ResponseFlag,
20    pub request_id: u32,
21}
22
23impl Acknowledge {
24    #[must_use]
25    pub fn builder() -> AcknowledgeBuilder {
26        AcknowledgeBuilder::new()
27    }
28
29    #[must_use]
30    pub fn into_builder(self) -> AcknowledgeBuilder {
31        AcknowledgeBuilder::new_from_body(self)
32    }
33
34    #[must_use]
35    pub fn into_pdu_body(self) -> PduBody {
36        PduBody::Acknowledge(self)
37    }
38}
39
40impl BodyInfo for Acknowledge {
41    fn body_length(&self) -> u16 {
42        ACKNOWLEDGE_BODY_LENGTH
43    }
44
45    fn body_type(&self) -> PduType {
46        PduType::Acknowledge
47    }
48}
49
50impl Interaction for Acknowledge {
51    fn originator(&self) -> Option<&EntityId> {
52        Some(&self.originating_id)
53    }
54
55    fn receiver(&self) -> Option<&EntityId> {
56        Some(&self.receiving_id)
57    }
58}