scsys_actors/power/
state.rs1use strum::{AsRefStr, Display, EnumCount, EnumIs, EnumIter, EnumString, VariantNames};
6
7#[cfg_attr(
8 feature = "serde",
9 derive(serde::Deserialize, serde::Serialize),
10 serde(rename_all = "lowercase", untagged)
11)]
12#[derive(
13 AsRefStr,
14 Clone,
15 Copy,
16 Debug,
17 Default,
18 Display,
19 EnumCount,
20 EnumIs,
21 EnumIter,
22 EnumString,
23 Eq,
24 Hash,
25 Ord,
26 PartialEq,
27 PartialOrd,
28 VariantNames,
29)]
30#[repr(u8)]
31#[strum(serialize_all = "lowercase")]
32pub enum Power {
33 Off,
34 #[default]
35 On,
36}
37
38impl Power {
39 pub fn off() -> Self {
40 Power::Off
41 }
42
43 pub fn on() -> Self {
44 Power::On
45 }
46}
47
48impl From<bool> for Power {
49 fn from(b: bool) -> Self {
50 match b {
51 true => Power::On,
52 false => Power::Off,
53 }
54 }
55}
56
57impl From<Power> for bool {
58 fn from(p: Power) -> Self {
59 match p {
60 Power::On => true,
61 Power::Off => false,
62 }
63 }
64}
65
66macro_rules! impl_from {
67 ($($t:ty),*) => {
68 $(
69 enum_from_primitive!(Power(0: Off, 1: On)<$t>);
70 )*
71 };
72}
73
74impl_from!(i8, i16, i32, i64, i128, isize, u8, u16, u32, u64, u128, usize);