bnr_xfs/cash_unit/threshold/
status.rs1use std::fmt;
2
3use crate::impl_xfs_enum;
4
5const THRESHOLD_STAT_OK: u32 = 0;
6const THRESHOLD_STAT_FULL: u32 = 1;
7const THRESHOLD_STAT_HIGH: u32 = 2;
8const THRESHOLD_STAT_LOW: u32 = 4;
9const THRESHOLD_STAT_EMPTY: u32 = 8;
10const THRESHOLD_STAT_UNKNOWN: u32 = 16;
11const THRESHOLD_STAT_NOT_SUPPORTED: u32 = 32;
12
13#[repr(u32)]
26#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
27pub enum ThresholdStatus {
28 #[default]
30 Ok = THRESHOLD_STAT_OK,
31 Full = THRESHOLD_STAT_FULL,
33 High = THRESHOLD_STAT_HIGH,
35 Low = THRESHOLD_STAT_LOW,
37 Empty = THRESHOLD_STAT_EMPTY,
39 Unknown = THRESHOLD_STAT_UNKNOWN,
41 NotSupported = THRESHOLD_STAT_NOT_SUPPORTED,
43}
44
45impl ThresholdStatus {
46 pub const fn new() -> Self {
48 Self::Ok
49 }
50
51 pub const fn create(val: u32) -> Self {
53 match val {
54 THRESHOLD_STAT_OK => Self::Ok,
55 THRESHOLD_STAT_FULL => Self::Full,
56 THRESHOLD_STAT_HIGH => Self::High,
57 THRESHOLD_STAT_LOW => Self::Low,
58 THRESHOLD_STAT_EMPTY => Self::Empty,
59 THRESHOLD_STAT_UNKNOWN => Self::Unknown,
60 THRESHOLD_STAT_NOT_SUPPORTED => Self::NotSupported,
61 _ => Self::Unknown,
62 }
63 }
64}
65
66impl From<&ThresholdStatus> for &'static str {
67 fn from(val: &ThresholdStatus) -> Self {
68 match val {
69 ThresholdStatus::Ok => "OK",
70 ThresholdStatus::Full => "full",
71 ThresholdStatus::High => "high",
72 ThresholdStatus::Low => "low",
73 ThresholdStatus::Empty => "empty",
74 ThresholdStatus::Unknown => "unknown",
75 ThresholdStatus::NotSupported => "not supported",
76 }
77 }
78}
79
80impl From<ThresholdStatus> for &'static str {
81 fn from(val: ThresholdStatus) -> Self {
82 (&val).into()
83 }
84}
85
86impl fmt::Display for ThresholdStatus {
87 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
88 write!(f, r#""{}""#, <&str>::from(self))
89 }
90}
91
92impl_xfs_enum!(ThresholdStatus, "thresholdStatus");