rusmpp_core/values/
ms_validity.rs

1use rusmpp_macros::Rusmpp;
2
3#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
4#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
5#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
6#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
7pub struct MsValidity {
8    pub validity_behavior: MsValidityBehavior,
9    #[rusmpp(length = "checked")]
10    pub validity_information: Option<MsValidityInformation>,
11}
12
13impl MsValidity {
14    pub fn new(
15        validity_behavior: MsValidityBehavior,
16        validity_information: Option<MsValidityInformation>,
17    ) -> Self {
18        Self {
19            validity_behavior,
20            validity_information,
21        }
22    }
23}
24
25#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
26#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
27#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
28#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
29pub struct MsValidityInformation {
30    pub units_of_time: UnitsOfTime,
31    pub number_of_time_units: u16,
32}
33
34impl MsValidityInformation {
35    pub fn new(units_of_time: UnitsOfTime, number_of_time_units: u16) -> Self {
36        Self {
37            units_of_time,
38            number_of_time_units,
39        }
40    }
41}
42
43#[repr(u8)]
44#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
45#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
46#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
47#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
48pub enum MsValidityBehavior {
49    #[default]
50    StoreIndefinitely = 0,
51    PowerDown = 1,
52    ValidUntilRegistrationAreaChanges = 2,
53    DisplayOnly = 3,
54    RelativeTimePeriod = 4,
55    Other(u8),
56}
57
58#[repr(u8)]
59#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
60#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
61#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
62#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
63pub enum UnitsOfTime {
64    #[default]
65    Seconds = 0b00000000,
66    Minutes = 0b00000001,
67    Hours = 0b00000010,
68    Days = 0b00000011,
69    Weeks = 0b00000100,
70    Months = 0b00000101,
71    Years = 0b00000110,
72    Other(u8),
73}
74
75#[cfg(test)]
76mod tests {
77    use super::*;
78
79    #[test]
80    fn encode_decode() {
81        #[cfg(feature = "alloc")]
82        crate::tests::owned::encode_decode_with_length_test_instances::<MsValidity>();
83        crate::tests::borrowed::encode_decode_with_length_test_instances::<MsValidity>();
84        #[cfg(feature = "alloc")]
85        crate::tests::owned::encode_decode_test_instances::<MsValidityInformation>();
86        crate::tests::borrowed::encode_decode_test_instances::<MsValidityInformation>();
87        #[cfg(feature = "alloc")]
88        crate::tests::owned::encode_decode_test_instances::<MsValidityBehavior>();
89        crate::tests::borrowed::encode_decode_test_instances::<MsValidityBehavior>();
90        #[cfg(feature = "alloc")]
91        crate::tests::owned::encode_decode_test_instances::<UnitsOfTime>();
92        crate::tests::borrowed::encode_decode_test_instances::<UnitsOfTime>();
93    }
94}