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");