rusmpp_core/values/
ms_msg_wait_facilities.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 MsMsgWaitFacilities {
9    pub indicator: Indicator,
10    pub type_of_message: TypeOfMessage,
11}
12
13impl MsMsgWaitFacilities {
14    pub fn new(indicator: Indicator, type_of_message: TypeOfMessage) -> Self {
15        Self {
16            indicator,
17            type_of_message,
18        }
19    }
20}
21
22impl From<u8> for MsMsgWaitFacilities {
23    fn from(value: u8) -> Self {
24        Self {
25            indicator: Indicator::from(value & 0b10000000),
26            type_of_message: TypeOfMessage::from(value & 0b00000011),
27        }
28    }
29}
30
31impl From<MsMsgWaitFacilities> for u8 {
32    fn from(value: MsMsgWaitFacilities) -> Self {
33        u8::from(value.indicator) | u8::from(value.type_of_message)
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 Indicator {
43    #[default]
44    Inactive = 0b00000000,
45    Active = 0b10000000,
46    Other(u8),
47}
48
49#[repr(u8)]
50#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
51#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
52#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
53#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
54pub enum TypeOfMessage {
55    #[default]
56    VoicemailMessageWaiting = 0b00000000,
57    FaxMessageWaiting = 0b00000001,
58    ElectronicMailMessageWaiting = 0b00000010,
59    OtherMessageWaiting = 0b00000011,
60    Other(u8),
61}
62
63#[cfg(test)]
64mod tests {
65    use super::*;
66
67    #[test]
68    fn to_u8() {
69        let ms_message_wait_facilities = MsMsgWaitFacilities::new(
70            Indicator::Active,
71            TypeOfMessage::ElectronicMailMessageWaiting,
72        );
73
74        assert_eq!(u8::from(ms_message_wait_facilities), 0b10000010);
75    }
76
77    #[test]
78    fn from_u8() {
79        let ms_message_wait_facilities = MsMsgWaitFacilities::from(0b10000010);
80
81        assert_eq!(ms_message_wait_facilities.indicator, Indicator::Active);
82        assert_eq!(
83            ms_message_wait_facilities.type_of_message,
84            TypeOfMessage::ElectronicMailMessageWaiting
85        );
86    }
87
88    #[test]
89    fn encode_decode() {
90        #[cfg(feature = "alloc")]
91        crate::tests::owned::encode_decode_test_instances::<MsMsgWaitFacilities>();
92        crate::tests::borrowed::encode_decode_test_instances::<MsMsgWaitFacilities>();
93        #[cfg(feature = "alloc")]
94        crate::tests::owned::encode_decode_test_instances::<Indicator>();
95        crate::tests::borrowed::encode_decode_test_instances::<Indicator>();
96        #[cfg(feature = "alloc")]
97        crate::tests::owned::encode_decode_test_instances::<TypeOfMessage>();
98        crate::tests::borrowed::encode_decode_test_instances::<TypeOfMessage>();
99    }
100}