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