sysctl/
ctl_type.rs
1use ctl_value::*;
4
5#[derive(Debug, Copy, Clone, PartialEq)]
19#[repr(u32)]
20pub enum CtlType {
21 Node = 1,
22 Int = 2,
23 String = 3,
24 S64 = 4,
25 Struct = 5,
26 Uint = 6,
27 Long = 7,
28 Ulong = 8,
29 U64 = 9,
30 U8 = 10,
31 U16 = 11,
32 S8 = 12,
33 S16 = 13,
34 S32 = 14,
35 U32 = 15,
36 None = 0,
38 #[cfg(target_os = "freebsd")]
39 Temperature = 16,
40}
41impl std::convert::From<u32> for CtlType {
42 fn from(t: u32) -> Self {
43 assert!(t <= 16);
44 unsafe { std::mem::transmute(t) }
45 }
46}
47impl std::convert::From<&CtlValue> for CtlType {
48 fn from(t: &CtlValue) -> Self {
49 match t {
50 CtlValue::None => CtlType::None,
51 CtlValue::Node(_) => CtlType::Node,
52 CtlValue::Int(_) => CtlType::Int,
53 CtlValue::String(_) => CtlType::String,
54 CtlValue::S64(_) => CtlType::S64,
55 CtlValue::Struct(_) => CtlType::Struct,
56 CtlValue::Uint(_) => CtlType::Uint,
57 CtlValue::Long(_) => CtlType::Long,
58 CtlValue::Ulong(_) => CtlType::Ulong,
59 CtlValue::U64(_) => CtlType::U64,
60 CtlValue::U8(_) => CtlType::U8,
61 CtlValue::U16(_) => CtlType::U16,
62 CtlValue::S8(_) => CtlType::S8,
63 CtlValue::S16(_) => CtlType::S16,
64 CtlValue::S32(_) => CtlType::S32,
65 CtlValue::U32(_) => CtlType::U32,
66 #[cfg(target_os = "freebsd")]
67 CtlValue::Temperature(_) => CtlType::Temperature,
68 }
69 }
70}
71impl std::convert::From<CtlValue> for CtlType {
72 fn from(t: CtlValue) -> Self {
73 Self::from(&t)
74 }
75}
76
77impl CtlType {
78 pub fn min_type_size(&self) -> usize {
79 match self {
80 CtlType::None => 0,
81 CtlType::Node => 0,
82 CtlType::Int => std::mem::size_of::<libc::c_int>(),
83 CtlType::String => 0,
84 CtlType::S64 => std::mem::size_of::<i64>(),
85 CtlType::Struct => 0,
86 CtlType::Uint => std::mem::size_of::<libc::c_uint>(),
87 CtlType::Long => std::mem::size_of::<libc::c_long>(),
88 CtlType::Ulong => std::mem::size_of::<libc::c_ulong>(),
89 CtlType::U64 => std::mem::size_of::<u64>(),
90 CtlType::U8 => std::mem::size_of::<u8>(),
91 CtlType::U16 => std::mem::size_of::<u16>(),
92 CtlType::S8 => std::mem::size_of::<i8>(),
93 CtlType::S16 => std::mem::size_of::<i16>(),
94 CtlType::S32 => std::mem::size_of::<i32>(),
95 CtlType::U32 => std::mem::size_of::<u32>(),
96 #[cfg(target_os = "freebsd")]
98 CtlType::Temperature => 0,
99 }
100 }
101}
102