sim_lib_view_device/
ladder.rs1use sim_kernel::Symbol;
4
5#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
10pub enum DeviceTier {
11 Display,
13 Sensor,
15 Actuator,
17 Rich,
20}
21
22impl DeviceTier {
23 pub const ALL: [DeviceTier; 4] = [
25 DeviceTier::Display,
26 DeviceTier::Sensor,
27 DeviceTier::Actuator,
28 DeviceTier::Rich,
29 ];
30
31 pub fn token(self) -> &'static str {
33 match self {
34 DeviceTier::Display => "display",
35 DeviceTier::Sensor => "sensor",
36 DeviceTier::Actuator => "actuator",
37 DeviceTier::Rich => "rich",
38 }
39 }
40
41 pub fn to_symbol(self) -> Symbol {
43 Symbol::new(self.token())
44 }
45
46 pub fn from_symbol(symbol: &Symbol) -> Option<Self> {
48 match symbol.name.as_ref() {
49 "display" if symbol.namespace.is_none() => Some(DeviceTier::Display),
50 "sensor" if symbol.namespace.is_none() => Some(DeviceTier::Sensor),
51 "actuator" if symbol.namespace.is_none() => Some(DeviceTier::Actuator),
52 "rich" if symbol.namespace.is_none() => Some(DeviceTier::Rich),
53 _ => None,
54 }
55 }
56
57 pub fn supports(self, required: DeviceTier) -> bool {
59 self >= required
60 }
61}