rusmpp_core/values/
interface_version.rs

1use rusmpp_macros::Rusmpp;
2
3#[repr(u8)]
4#[derive(Debug, Copy, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Default, Rusmpp)]
5#[rusmpp(from_into = skip)]
6#[cfg_attr(feature = "arbitrary", derive(::arbitrary::Arbitrary))]
7#[cfg_attr(feature = "serde", derive(::serde::Serialize))]
8#[cfg_attr(feature = "serde-deserialize-unchecked", derive(::serde::Deserialize))]
9pub enum InterfaceVersion {
10    Smpp3_3OrEarlier(u8),
11    Smpp3_4 = 0x34,
12    #[default]
13    Smpp5_0 = 0x50,
14    Other(u8),
15}
16
17impl From<InterfaceVersion> for u8 {
18    fn from(value: InterfaceVersion) -> Self {
19        match value {
20            InterfaceVersion::Smpp3_3OrEarlier(value) => value,
21            InterfaceVersion::Smpp3_4 => 0x34,
22            InterfaceVersion::Smpp5_0 => 0x50,
23            InterfaceVersion::Other(value) => value,
24        }
25    }
26}
27
28impl From<u8> for InterfaceVersion {
29    fn from(value: u8) -> Self {
30        match value {
31            0x00..=0x33 => Self::Smpp3_3OrEarlier(value),
32            0x34 => Self::Smpp3_4,
33            0x50 => Self::Smpp5_0,
34            _ => Self::Other(value),
35        }
36    }
37}
38
39#[cfg(test)]
40mod tests {
41    use super::*;
42
43    #[test]
44    fn encode_decode() {
45        #[cfg(feature = "alloc")]
46        crate::tests::owned::encode_decode_test_instances::<InterfaceVersion>();
47        crate::tests::borrowed::encode_decode_test_instances::<InterfaceVersion>();
48    }
49}