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