dis_rs/common/resupply_offer/
model.rs1use crate::common::model::{EntityId, PduBody};
2use crate::common::{BodyInfo, Interaction};
3use crate::enumerations::PduType;
4use crate::model::{SupplyQuantity, SUPPLY_QUANTITY_RECORD_LENGTH};
5use crate::resupply_offer::builder::ResupplyOfferBuilder;
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9const RESUPPLY_OFFER_BASE_BODY_LENGTH: u16 = 16;
10
11#[derive(Clone, Debug, Default, PartialEq)]
15#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
16pub struct ResupplyOffer {
17 pub requesting_id: EntityId,
18 pub servicing_id: EntityId,
19 pub supplies: Vec<SupplyQuantity>,
20}
21
22impl ResupplyOffer {
23 #[must_use]
24 pub fn builder() -> ResupplyOfferBuilder {
25 ResupplyOfferBuilder::new()
26 }
27
28 #[must_use]
29 pub fn into_builder(self) -> ResupplyOfferBuilder {
30 ResupplyOfferBuilder::new_from_body(self)
31 }
32
33 #[must_use]
34 pub fn into_pdu_body(self) -> PduBody {
35 PduBody::ResupplyOffer(self)
36 }
37}
38
39impl BodyInfo for ResupplyOffer {
40 fn body_length(&self) -> u16 {
41 RESUPPLY_OFFER_BASE_BODY_LENGTH
42 + (self.supplies.len() as u16 * SUPPLY_QUANTITY_RECORD_LENGTH)
43 }
44
45 fn body_type(&self) -> PduType {
46 PduType::ResupplyOffer
47 }
48}
49
50impl Interaction for ResupplyOffer {
51 fn originator(&self) -> Option<&EntityId> {
52 Some(&self.requesting_id)
53 }
54
55 fn receiver(&self) -> Option<&EntityId> {
56 Some(&self.servicing_id)
57 }
58}