dis_rs/common/record_query_r/
model.rs1use crate::common::model::EntityId;
2use crate::common::{BodyInfo, Interaction};
3use crate::constants::FOUR_OCTETS;
4use crate::enumerations::{
5 PduType, RecordQueryREventType, RequiredReliabilityService, VariableRecordType,
6};
7use crate::model::{PduBody, TimeStamp};
8use crate::record_query_r::builder::RecordQueryRBuilder;
9#[cfg(feature = "serde")]
10use serde::{Deserialize, Serialize};
11
12pub const BASE_RECORD_QUERY_R_BODY_LENGTH: u16 = 28;
13
14#[derive(Clone, Debug, Default, PartialEq)]
18#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
19pub struct RecordQueryR {
20 pub originating_id: EntityId,
21 pub receiving_id: EntityId,
22 pub request_id: u32,
23 pub required_reliability_service: RequiredReliabilityService,
24 pub event_type: RecordQueryREventType,
25 pub time: TimeStamp,
26 pub record_query_specification: RecordQuerySpecification,
27}
28
29impl RecordQueryR {
30 #[must_use]
31 pub fn builder() -> RecordQueryRBuilder {
32 RecordQueryRBuilder::new()
33 }
34
35 #[must_use]
36 pub fn into_builder(self) -> RecordQueryRBuilder {
37 RecordQueryRBuilder::new_from_body(self)
38 }
39
40 #[must_use]
41 pub fn into_pdu_body(self) -> PduBody {
42 PduBody::RecordQueryR(self)
43 }
44}
45
46impl BodyInfo for RecordQueryR {
47 fn body_length(&self) -> u16 {
48 BASE_RECORD_QUERY_R_BODY_LENGTH
49 + (self.record_query_specification.record_ids.len() * FOUR_OCTETS) as u16
50 }
51
52 fn body_type(&self) -> PduType {
53 PduType::RecordQueryR
54 }
55}
56
57impl Interaction for RecordQueryR {
58 fn originator(&self) -> Option<&EntityId> {
59 Some(&self.originating_id)
60 }
61
62 fn receiver(&self) -> Option<&EntityId> {
63 Some(&self.receiving_id)
64 }
65}
66
67#[derive(Clone, Debug, Default, PartialEq)]
69#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
70pub struct RecordQuerySpecification {
71 pub record_ids: Vec<VariableRecordType>,
72}
73
74impl RecordQuerySpecification {
75 #[must_use]
76 pub fn with_record_id(mut self, record_id: VariableRecordType) -> Self {
77 self.record_ids.push(record_id);
78 self
79 }
80
81 #[must_use]
82 pub fn with_record_ids(mut self, record_ids: Vec<VariableRecordType>) -> Self {
83 self.record_ids = record_ids;
84 self
85 }
86}