bnr_xfs/status/
hardware.rs1use std::fmt;
2
3const HARDWARE_OK: u32 = 0;
4const HARDWARE_MISSING: u32 = 1;
5const HARDWARE_NOTIFICATION: u32 = 2;
6const HARDWARE_WARNING: u32 = 3;
7const HARDWARE_ERROR: u32 = 4;
8
9#[repr(u32)]
11#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
12pub enum HardwareStatus {
13 #[default]
14 Ok = HARDWARE_OK,
15 Missing = HARDWARE_MISSING,
16 Notification = HARDWARE_NOTIFICATION,
17 Warning = HARDWARE_WARNING,
18 Error = HARDWARE_ERROR,
19}
20
21impl HardwareStatus {
22 pub const fn new() -> Self {
24 Self::Ok
25 }
26
27 pub const fn create(val: u32) -> Self {
29 match val {
30 HARDWARE_OK => Self::Ok,
31 HARDWARE_MISSING => Self::Missing,
32 HARDWARE_NOTIFICATION => Self::Notification,
33 HARDWARE_WARNING => Self::Warning,
34 HARDWARE_ERROR => Self::Error,
35 _ => Self::Missing,
36 }
37 }
38}
39
40impl From<&[HardwareStatus]> for HardwareStatus {
41 fn from(val: &[HardwareStatus]) -> Self {
42 if val.contains(&Self::Error) {
45 Self::Error
46 } else if val.contains(&Self::Warning) {
47 Self::Warning
48 } else if val.contains(&Self::Missing) {
49 Self::Missing
50 } else if val.contains(&Self::Notification) {
51 Self::Notification
52 } else {
53 Self::Ok
54 }
55 }
56}
57
58impl<const N: usize> From<&[HardwareStatus; N]> for HardwareStatus {
59 fn from(val: &[HardwareStatus; N]) -> Self {
60 val.as_ref().into()
61 }
62}
63
64impl<const N: usize> From<[HardwareStatus; N]> for HardwareStatus {
65 fn from(val: [HardwareStatus; N]) -> Self {
66 val.as_ref().into()
67 }
68}
69
70impl From<HardwareStatus> for &'static str {
71 fn from(val: HardwareStatus) -> Self {
72 match val {
73 HardwareStatus::Ok => "OK",
74 HardwareStatus::Missing => "missing",
75 HardwareStatus::Notification => "notification",
76 HardwareStatus::Warning => "warning",
77 HardwareStatus::Error => "error",
78 }
79 }
80}
81
82impl From<&HardwareStatus> for &'static str {
83 fn from(val: &HardwareStatus) -> Self {
84 (*val).into()
85 }
86}
87
88impl fmt::Display for HardwareStatus {
89 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
90 write!(f, r#""{}""#, <&str>::from(self))
91 }
92}
93
94impl_xfs_enum!(HardwareStatus, "hardwareStatus");