dis_rs/common/data_query_r/
model.rs

1use crate::common::model::{EntityId, PduBody};
2use crate::common::{BodyInfo, Interaction};
3use crate::constants::FOUR_OCTETS;
4use crate::data_query_r::builder::DataQueryRBuilder;
5use crate::enumerations::{PduType, RequiredReliabilityService, VariableRecordType};
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9pub const BASE_DATA_QUERY_R_BODY_LENGTH: u16 = 32;
10
11/// 5.12.4.9 Data Query-R PDU
12///
13/// 7.11.9 Data Query-R PDU
14#[derive(Clone, Debug, Default, PartialEq)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct DataQueryR {
17    pub originating_id: EntityId,
18    pub receiving_id: EntityId,
19    pub required_reliability_service: RequiredReliabilityService,
20    pub request_id: u32,
21    pub time_interval: u32,
22    pub fixed_datum_records: Vec<VariableRecordType>,
23    pub variable_datum_records: Vec<VariableRecordType>,
24}
25
26impl DataQueryR {
27    #[must_use]
28    pub fn builder() -> DataQueryRBuilder {
29        DataQueryRBuilder::new()
30    }
31
32    #[must_use]
33    pub fn into_builder(self) -> DataQueryRBuilder {
34        DataQueryRBuilder::new_from_body(self)
35    }
36
37    #[must_use]
38    pub fn into_pdu_body(self) -> PduBody {
39        PduBody::DataQueryR(self)
40    }
41}
42
43impl BodyInfo for DataQueryR {
44    fn body_length(&self) -> u16 {
45        BASE_DATA_QUERY_R_BODY_LENGTH
46            + (FOUR_OCTETS * self.fixed_datum_records.len()) as u16
47            + (FOUR_OCTETS * self.variable_datum_records.len()) as u16
48    }
49
50    fn body_type(&self) -> PduType {
51        PduType::DataQueryR
52    }
53}
54
55impl Interaction for DataQueryR {
56    fn originator(&self) -> Option<&EntityId> {
57        Some(&self.originating_id)
58    }
59
60    fn receiver(&self) -> Option<&EntityId> {
61        Some(&self.receiving_id)
62    }
63}