scsys_actors/power/
state.rs

1/*
2    Appellation: state <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5use 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);