bnr_xfs/status/
dispenser.rs1use std::fmt;
2
3use super::HardwareStatus;
4
5pub const CASH_UNIT_CHANGED: u32 = 6153;
6pub const CASH_UNIT_CONFIG_CHANGED: u32 = 6154;
7pub const CASH_UNIT_THRESHOLD: u32 = 6155;
8pub const CASH_UNIT_OK: u32 = 6181;
9pub const CASH_UNIT_STATE: u32 = 6182;
10pub const CASH_UNIT_STOP: u32 = 6183;
11pub const CASH_UNIT_UNKNOWN: u32 = 6184;
12pub const CASH_TAKEN: u32 = 6192;
13pub const CASH_AVAILABLE: u32 = 6223;
14
15#[repr(u32)]
17#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
18pub enum DispenserStatus {
19 Changed = CASH_UNIT_CHANGED,
21 ConfigChanged = CASH_UNIT_CONFIG_CHANGED,
23 Threshold = CASH_UNIT_THRESHOLD,
25 Ok = CASH_UNIT_OK,
27 State = CASH_UNIT_STATE,
29 Stop = CASH_UNIT_STOP,
31 #[default]
33 Unknown = CASH_UNIT_UNKNOWN,
34 CashTaken = CASH_TAKEN,
36 CashAvailable = CASH_AVAILABLE,
38}
39
40impl DispenserStatus {
41 pub const fn new() -> Self {
43 Self::Unknown
44 }
45
46 pub const fn create(val: u32) -> Self {
48 match val {
49 CASH_UNIT_CHANGED => Self::Changed,
50 CASH_UNIT_CONFIG_CHANGED => Self::ConfigChanged,
51 CASH_UNIT_THRESHOLD => Self::Threshold,
52 CASH_UNIT_OK => Self::Ok,
53 CASH_UNIT_STATE => Self::State,
54 CASH_UNIT_STOP => Self::Stop,
55 CASH_UNIT_UNKNOWN => Self::Unknown,
56 CASH_TAKEN => Self::CashTaken,
57 CASH_AVAILABLE => Self::CashAvailable,
58 _ => Self::Unknown,
59 }
60 }
61}
62
63impl From<DispenserStatus> for HardwareStatus {
64 fn from(val: DispenserStatus) -> Self {
65 match val {
66 DispenserStatus::Ok => Self::Ok,
67 DispenserStatus::Changed
68 | DispenserStatus::ConfigChanged
69 | DispenserStatus::CashAvailable
70 | DispenserStatus::CashTaken
71 | DispenserStatus::State => Self::Notification,
72 DispenserStatus::Threshold | DispenserStatus::Stop | DispenserStatus::Unknown => {
73 Self::Warning
74 }
75 }
76 }
77}
78
79impl From<DispenserStatus> for &'static str {
80 fn from(val: DispenserStatus) -> Self {
81 match val {
82 DispenserStatus::Changed => "changed",
83 DispenserStatus::ConfigChanged => "configuration changed",
84 DispenserStatus::Threshold => "threshold",
85 DispenserStatus::CashAvailable => "cash available",
86 DispenserStatus::CashTaken => "cash taken",
87 DispenserStatus::State => "state",
88 DispenserStatus::Stop => "stop",
89 DispenserStatus::Unknown => "unknown",
90 DispenserStatus::Ok => "OK",
91 }
92 }
93}
94
95impl From<&DispenserStatus> for &'static str {
96 fn from(val: &DispenserStatus) -> Self {
97 (*val).into()
98 }
99}
100
101impl fmt::Display for DispenserStatus {
102 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
103 write!(f, "{}", <&str>::from(self))
104 }
105}
106
107impl_xfs_enum!(DispenserStatus, "dispenserStatus");