rusmpp_core/values/
callback_num_pres_ind.rs

1use 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}