rusmpp_core/values/
ms_msg_wait_facilities.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 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}