pzzld_server/types/
power.rs1#[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}