rusmpp_core/values/
ms_validity.rs1use 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 crate::tests::owned::encode_decode_with_length_test_instances::<MsValidity>();
82 crate::tests::borrowed::encode_decode_with_length_test_instances::<MsValidity>();
83 crate::tests::owned::encode_decode_test_instances::<MsValidityInformation>();
84 crate::tests::borrowed::encode_decode_test_instances::<MsValidityInformation>();
85 crate::tests::owned::encode_decode_test_instances::<MsValidityBehavior>();
86 crate::tests::borrowed::encode_decode_test_instances::<MsValidityBehavior>();
87 crate::tests::owned::encode_decode_test_instances::<UnitsOfTime>();
88 crate::tests::borrowed::encode_decode_test_instances::<UnitsOfTime>();
89 }
90}