rusmpp_core/values/
registered_delivery.rs1use rusmpp_macros::Rusmpp;
2
3#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
4#[rusmpp(repr = "u8")]
5#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
6#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
7#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
8pub struct RegisteredDelivery {
9 mc_delivery_receipt: MCDeliveryReceipt,
10 sme_originated_acknowledgement: SmeOriginatedAcknowledgement,
11 intermediate_notification: IntermediateNotification,
12 other: u8,
13}
14
15impl RegisteredDelivery {
16 pub fn new(
17 mc_delivery_receipt: MCDeliveryReceipt,
18 sme_originated_acknowledgement: SmeOriginatedAcknowledgement,
19 intermediate_notification: IntermediateNotification,
20 other: u8,
21 ) -> Self {
22 let other = other & 0b00011111;
24
25 Self {
26 mc_delivery_receipt,
27 sme_originated_acknowledgement,
28 intermediate_notification,
29 other,
30 }
31 }
32
33 pub fn request_all() -> Self {
35 Self::new(
36 MCDeliveryReceipt::McDeliveryReceiptRequestedWhereFinalDeliveryOutcomeIsSuccessOrFailure,
37 SmeOriginatedAcknowledgement::BothDeliveryAndUserAcknowledgmentRequested,
38 IntermediateNotification::IntermediateNotificationRequested,
39 0,
40 )
41 }
42
43 pub fn mc_delivery_receipt(&self) -> MCDeliveryReceipt {
44 self.mc_delivery_receipt
45 }
46
47 pub fn sme_originated_acknowledgement(&self) -> SmeOriginatedAcknowledgement {
48 self.sme_originated_acknowledgement
49 }
50
51 pub fn intermediate_notification(&self) -> IntermediateNotification {
52 self.intermediate_notification
53 }
54
55 pub fn other(&self) -> u8 {
56 self.other
57 }
58}
59
60impl From<u8> for RegisteredDelivery {
61 fn from(value: u8) -> Self {
62 let mc_delivery_receipt = MCDeliveryReceipt::from(value & 0b00000011);
63 let sme_originated_acknowledgement = SmeOriginatedAcknowledgement::from(value & 0b00001100);
64 let intermediate_notification = IntermediateNotification::from(value & 0b00010000);
65 let other = value & 0b11100000;
66
67 Self {
68 mc_delivery_receipt,
69 sme_originated_acknowledgement,
70 intermediate_notification,
71 other,
72 }
73 }
74}
75
76impl From<RegisteredDelivery> for u8 {
77 fn from(value: RegisteredDelivery) -> Self {
78 u8::from(value.mc_delivery_receipt)
79 | u8::from(value.sme_originated_acknowledgement)
80 | u8::from(value.intermediate_notification)
81 | value.other
82 }
83}
84
85#[repr(u8)]
86#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
87#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
88#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
89#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
90pub enum MCDeliveryReceipt {
91 #[default]
92 NoMcDeliveryReceiptRequested = 0b00000000,
93 McDeliveryReceiptRequestedWhereFinalDeliveryOutcomeIsSuccessOrFailure = 0b00000001,
94 McDeliveryReceiptRequestedWhereFinalDeliveryOutcomeIsFailure = 0b00000010,
95 McDeliveryReceiptRequestedWhereFinalDeliveryOutcomeIsSuccess = 0b00000011,
96 Other(u8),
97}
98
99#[repr(u8)]
100#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
101#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
102#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
103#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
104pub enum SmeOriginatedAcknowledgement {
105 #[default]
106 NoReceiptSmeAcknowledgementRequested = 0b00000000,
107 SmeDeliveryAcknowledgementRequested = 0b00000100,
108 SmeUserAcknowledgementRequested = 0b00001000,
109 BothDeliveryAndUserAcknowledgmentRequested = 0b00001100,
110 Other(u8),
111}
112
113#[repr(u8)]
114#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
115#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
116#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
117#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
118pub enum IntermediateNotification {
119 #[default]
120 NoIntermediaryNotificationRequested = 0b00000000,
121 IntermediateNotificationRequested = 0b00010000,
122 Other(u8),
123}
124
125#[cfg(test)]
126mod tests {
127 use super::*;
128
129 #[test]
130 fn encode_decode() {
131 #[cfg(feature = "alloc")]
132 crate::tests::owned::encode_decode_test_instances::<RegisteredDelivery>();
133 crate::tests::borrowed::encode_decode_test_instances::<RegisteredDelivery>();
134 #[cfg(feature = "alloc")]
135 crate::tests::owned::encode_decode_test_instances::<MCDeliveryReceipt>();
136 crate::tests::borrowed::encode_decode_test_instances::<MCDeliveryReceipt>();
137 #[cfg(feature = "alloc")]
138 crate::tests::owned::encode_decode_test_instances::<SmeOriginatedAcknowledgement>();
139 crate::tests::borrowed::encode_decode_test_instances::<SmeOriginatedAcknowledgement>();
140 #[cfg(feature = "alloc")]
141 crate::tests::owned::encode_decode_test_instances::<IntermediateNotification>();
142 crate::tests::borrowed::encode_decode_test_instances::<IntermediateNotification>();
143 }
144}