pzzld_server/types/
power.rs

1/*
2    Appellation: power <module>
3    Contrib: FL03 <jo3mccain@icloud.com>
4*/
5
6#[derive(
7    Clone,
8    Copy,
9    Debug,
10    Default,
11    Eq,
12    Hash,
13    Ord,
14    PartialEq,
15    PartialOrd,
16    serde::Deserialize,
17    serde::Serialize,
18    strum::AsRefStr,
19    strum::Display,
20    strum::EnumCount,
21    strum::EnumIs,
22    strum::EnumIter,
23    strum::EnumString,
24    strum::VariantArray,
25    strum::VariantNames,
26)]
27#[serde(rename_all = "lowercase")]
28#[strum(serialize_all = "lowercase")]
29pub enum Power {
30    #[default]
31    Off = 0,
32    On = 1,
33}
34
35impl Power {
36    pub fn off() -> Self {
37        Self::Off
38    }
39
40    pub fn on() -> Self {
41        Self::On
42    }
43}
44
45impl From<Power> for usize {
46    fn from(p: Power) -> Self {
47        p as usize
48    }
49}
50
51impl From<usize> for Power {
52    fn from(i: usize) -> Self {
53        use strum::EnumCount;
54        match i % Self::COUNT as usize {
55            0 => Self::Off,
56            _ => Self::On,
57        }
58    }
59}
60
61impl From<bool> for Power {
62    fn from(b: bool) -> Self {
63        if b {
64            Self::On
65        } else {
66            Self::Off
67        }
68    }
69}
70
71impl From<Power> for bool {
72    fn from(p: Power) -> Self {
73        match p {
74            Power::Off => false,
75            Power::On => true,
76        }
77    }
78}