async_snmp/version.rs
1//! SNMP version enumeration.
2
3/// SNMP protocol version.
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[non_exhaustive]
6#[derive(Default)]
7pub enum Version {
8 /// SNMPv1 (RFC 1157)
9 V1,
10 /// SNMPv2c (RFC 1901)
11 #[default]
12 V2c,
13 /// SNMPv3 (RFC 3411-3418)
14 V3,
15}
16
17impl Version {
18 /// Get the BER-encoded version number.
19 ///
20 /// # Examples
21 ///
22 /// ```
23 /// use async_snmp::Version;
24 ///
25 /// assert_eq!(Version::V1.as_i32(), 0);
26 /// assert_eq!(Version::V2c.as_i32(), 1);
27 /// assert_eq!(Version::V3.as_i32(), 3);
28 /// ```
29 pub const fn as_i32(self) -> i32 {
30 match self {
31 Version::V1 => 0,
32 Version::V2c => 1,
33 Version::V3 => 3,
34 }
35 }
36
37 /// Create from BER-encoded version number.
38 ///
39 /// # Examples
40 ///
41 /// ```
42 /// use async_snmp::Version;
43 ///
44 /// assert_eq!(Version::from_i32(0), Some(Version::V1));
45 /// assert_eq!(Version::from_i32(1), Some(Version::V2c));
46 /// assert_eq!(Version::from_i32(3), Some(Version::V3));
47 /// assert_eq!(Version::from_i32(2), None); // Invalid version
48 /// ```
49 pub const fn from_i32(value: i32) -> Option<Self> {
50 match value {
51 0 => Some(Version::V1),
52 1 => Some(Version::V2c),
53 3 => Some(Version::V3),
54 _ => None,
55 }
56 }
57}
58
59impl std::fmt::Display for Version {
60 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
61 match self {
62 Version::V1 => write!(f, "SNMPv1"),
63 Version::V2c => write!(f, "SNMPv2c"),
64 Version::V3 => write!(f, "SNMPv3"),
65 }
66 }
67}