rusmpp_core/values/
callback_num_pres_ind.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 CallbackNumPresInd {
9 pub presentation: Presentation,
10 pub screening: Screening,
11}
12
13impl CallbackNumPresInd {
14 pub fn new(presentation: Presentation, screening: Screening) -> Self {
15 Self {
16 presentation,
17 screening,
18 }
19 }
20}
21
22impl From<u8> for CallbackNumPresInd {
23 fn from(value: u8) -> Self {
24 Self {
25 presentation: Presentation::from(value & 0b00000011),
26 screening: Screening::from(value & 0b00001100),
27 }
28 }
29}
30
31impl From<CallbackNumPresInd> for u8 {
32 fn from(value: CallbackNumPresInd) -> Self {
33 u8::from(value.presentation) | u8::from(value.screening)
34 }
35}
36
37#[repr(u8)]
38#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
39#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
40#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
41#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
42pub enum Presentation {
43 #[default]
44 PresentationAllowed = 0b00000000,
45 PresentationRestricted = 0b00000001,
46 NumberNotAvailable = 0b00000010,
47 Other(u8),
48}
49
50#[repr(u8)]
51#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
52#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
53#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
54#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
55pub enum Screening {
56 #[default]
57 NotScreened = 0b00000000,
58 VerifiedAndPassed = 0b00000100,
59 VerifiedAndFailed = 0b00001000,
60 NetworkProvided = 0b00001100,
61 Other(u8),
62}
63
64#[cfg(test)]
65mod tests {
66 use super::*;
67
68 #[test]
69 fn to_u8() {
70 let callback_num_pres_ind = CallbackNumPresInd {
71 presentation: Presentation::PresentationRestricted,
72 screening: Screening::VerifiedAndFailed,
73 };
74
75 assert_eq!(u8::from(callback_num_pres_ind), 0b00001001);
76 }
77
78 #[test]
79 fn from_u8() {
80 let callback_num_pres_ind = CallbackNumPresInd::from(0b00001001);
81
82 assert_eq!(
83 callback_num_pres_ind,
84 CallbackNumPresInd {
85 presentation: Presentation::PresentationRestricted,
86 screening: Screening::VerifiedAndFailed,
87 }
88 );
89 }
90
91 #[test]
92 fn encode_decode() {
93 #[cfg(feature = "alloc")]
94 crate::tests::owned::encode_decode_test_instances::<CallbackNumPresInd>();
95 crate::tests::borrowed::encode_decode_test_instances::<CallbackNumPresInd>();
96 #[cfg(feature = "alloc")]
97 crate::tests::owned::encode_decode_test_instances::<Presentation>();
98 crate::tests::borrowed::encode_decode_test_instances::<Presentation>();
99 #[cfg(feature = "alloc")]
100 crate::tests::owned::encode_decode_test_instances::<Screening>();
101 crate::tests::borrowed::encode_decode_test_instances::<Screening>();
102 }
103}