1use std::fmt::{Display, Formatter, Result};
4
5#[allow(missing_docs)]
7#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq)]
8pub enum SensorSubFunctionType {
9 Input,
10 Fault,
11 Label,
12 Type,
13 Lowest,
14 Highest,
15 InputLowest,
16 InputHighest,
17 Average,
18 AverageIntervalMax,
19 AverageIntervalMin,
20 AverageHighest,
21 AverageLowest,
22 Accuracy,
23 CapMin,
24 CapMax,
25 Enable,
26 Max,
27 Min,
28 MaxHyst,
29 MinHyst,
30 Crit,
31 CritHyst,
32 Emergency,
33 EmergencyHyst,
34 LowCrit,
35 LowCritHyst,
36 Offset,
37 Div,
38 Pulses,
39 Target,
40 AverageInterval,
41 AverageMax,
42 AverageMin,
43 Cap,
44 CapHyst,
45 ResetHistory,
46 Pwm,
47 Mode,
48 Freq,
49 AutoChannelsTemp,
50 Alarm,
51 MinAlarm,
52 MaxAlarm,
53 CritAlarm,
54 LowCritAlarm,
55 CapAlarm,
56 EmergencyAlarm,
57 Beep,
58}
59
60impl SensorSubFunctionType {
61 pub(crate) fn read_only_list() -> &'static [SensorSubFunctionType] {
62 const ARRAY: [SensorSubFunctionType; 23] = [
63 SensorSubFunctionType::Input,
64 SensorSubFunctionType::Fault,
65 SensorSubFunctionType::Label,
66 SensorSubFunctionType::Type,
67 SensorSubFunctionType::Lowest,
68 SensorSubFunctionType::Highest,
69 SensorSubFunctionType::InputLowest,
70 SensorSubFunctionType::InputHighest,
71 SensorSubFunctionType::Average,
72 SensorSubFunctionType::AverageIntervalMax,
73 SensorSubFunctionType::AverageIntervalMin,
74 SensorSubFunctionType::AverageHighest,
75 SensorSubFunctionType::AverageLowest,
76 SensorSubFunctionType::Accuracy,
77 SensorSubFunctionType::CapMin,
78 SensorSubFunctionType::CapMax,
79 SensorSubFunctionType::Alarm,
80 SensorSubFunctionType::MinAlarm,
81 SensorSubFunctionType::MaxAlarm,
82 SensorSubFunctionType::CritAlarm,
83 SensorSubFunctionType::LowCritAlarm,
84 SensorSubFunctionType::CapAlarm,
85 SensorSubFunctionType::EmergencyAlarm,
86 ];
87 &ARRAY
88 }
89
90 pub(crate) fn read_write_list() -> &'static [SensorSubFunctionType] {
91 const ARRAY: [SensorSubFunctionType; 25] = [
92 SensorSubFunctionType::Enable,
93 SensorSubFunctionType::Max,
94 SensorSubFunctionType::Min,
95 SensorSubFunctionType::MaxHyst,
96 SensorSubFunctionType::MinHyst,
97 SensorSubFunctionType::Crit,
98 SensorSubFunctionType::CritHyst,
99 SensorSubFunctionType::Emergency,
100 SensorSubFunctionType::EmergencyHyst,
101 SensorSubFunctionType::LowCrit,
102 SensorSubFunctionType::LowCritHyst,
103 SensorSubFunctionType::Offset,
104 SensorSubFunctionType::Div,
105 SensorSubFunctionType::Pulses,
106 SensorSubFunctionType::Target,
107 SensorSubFunctionType::AverageInterval,
108 SensorSubFunctionType::AverageMax,
109 SensorSubFunctionType::AverageMin,
110 SensorSubFunctionType::Cap,
111 SensorSubFunctionType::CapHyst,
112 SensorSubFunctionType::Pwm,
113 SensorSubFunctionType::Mode,
114 SensorSubFunctionType::Freq,
115 SensorSubFunctionType::AutoChannelsTemp,
116 SensorSubFunctionType::Beep,
117 ];
118 &ARRAY
119 }
120
121 #[cfg(feature = "writeable")]
122 pub(crate) fn write_only_list() -> &'static [SensorSubFunctionType] {
123 const ARRAY: [SensorSubFunctionType; 1] = [SensorSubFunctionType::ResetHistory];
124 &ARRAY
125 }
126
127 pub(crate) fn read_list() -> impl Iterator<Item = Self> {
128 Self::read_only_list()
129 .iter()
130 .chain(Self::read_write_list())
131 .copied()
132 }
133
134 #[cfg(feature = "writeable")]
135 pub(crate) fn write_list() -> impl Iterator<Item = Self> {
136 Self::write_only_list()
137 .iter()
138 .chain(Self::read_write_list())
139 .copied()
140 }
141
142 pub(crate) fn to_suffix(self) -> &'static str {
143 match self {
144 SensorSubFunctionType::Input => "_input",
145 SensorSubFunctionType::Fault => "_fault",
146 SensorSubFunctionType::Label => "_label",
147 SensorSubFunctionType::Type => "_type",
148 SensorSubFunctionType::Lowest => "_lowest",
149 SensorSubFunctionType::Highest => "_highest",
150 SensorSubFunctionType::InputLowest => "_input_lowest",
151 SensorSubFunctionType::InputHighest => "_input_highest",
152 SensorSubFunctionType::Average => "_average",
153 SensorSubFunctionType::AverageIntervalMax => "_average_interval_max",
154 SensorSubFunctionType::AverageIntervalMin => "_average_interval_min",
155 SensorSubFunctionType::AverageHighest => "_average_highest",
156 SensorSubFunctionType::AverageLowest => "_average_lowest",
157 SensorSubFunctionType::Accuracy => "_accuracy",
158 SensorSubFunctionType::CapMin => "_cap_min",
159 SensorSubFunctionType::CapMax => "_cap_max",
160 SensorSubFunctionType::Enable => "_enable",
161 SensorSubFunctionType::Max => "_max",
162 SensorSubFunctionType::Min => "_min",
163 SensorSubFunctionType::MaxHyst => "_max_hyst",
164 SensorSubFunctionType::MinHyst => "_min_hyst",
165 SensorSubFunctionType::Crit => "_crit",
166 SensorSubFunctionType::CritHyst => "_crit_hyst",
167 SensorSubFunctionType::Emergency => "_emergency",
168 SensorSubFunctionType::EmergencyHyst => "_emergency_hyst",
169 SensorSubFunctionType::LowCrit => "_lcrit",
170 SensorSubFunctionType::LowCritHyst => "_lcrit_hyst",
171 SensorSubFunctionType::Offset => "_offset",
172 SensorSubFunctionType::Div => "_div",
173 SensorSubFunctionType::Pulses => "_pulses",
174 SensorSubFunctionType::Target => "_target",
175 SensorSubFunctionType::AverageInterval => "_average_interval",
176 SensorSubFunctionType::AverageMax => "_average_max",
177 SensorSubFunctionType::AverageMin => "_average_min",
178 SensorSubFunctionType::Cap => "_cap",
179 SensorSubFunctionType::CapHyst => "_cap_hyst",
180 SensorSubFunctionType::ResetHistory => "_reset_history",
181 SensorSubFunctionType::Pwm => "",
182 SensorSubFunctionType::Mode => "_mode",
183 SensorSubFunctionType::Freq => "_freq",
184 SensorSubFunctionType::AutoChannelsTemp => "_auto_channels_temp",
185 SensorSubFunctionType::Alarm => "_alarm",
186 SensorSubFunctionType::MinAlarm => "_min_alarm",
187 SensorSubFunctionType::MaxAlarm => "_max_alarm",
188 SensorSubFunctionType::CritAlarm => "_crit_alarm",
189 SensorSubFunctionType::LowCritAlarm => "_lcrit_alarm",
190 SensorSubFunctionType::CapAlarm => "_cap_alarm",
191 SensorSubFunctionType::EmergencyAlarm => "_emergency_alarm",
192 SensorSubFunctionType::Beep => "_beep",
193 }
194 }
195}
196
197impl Display for SensorSubFunctionType {
198 fn fmt(&self, f: &mut Formatter) -> Result {
199 write!(f, "{:?}", self)
200 }
201}