libmedium/sensors/
subfunction_type.rs

1//! Module containing sensor subfunction types.
2
3use std::fmt::{Display, Formatter, Result};
4
5/// Enum that represents a sensor subfunction type.
6#[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}