use std::fmt;
use crate::impl_xfs_enum;
const INTERMEDIATE_CDR_OFFSET: u32 = 6140;
const CDR_INPUT_REFUSED: u32 = 6209;
const CDR_SUBCASHIN: u32 = INTERMEDIATE_CDR_OFFSET;
const CDR_BCC_INSERTED: u32 = INTERMEDIATE_CDR_OFFSET + 1;
const CDR_NOT_SUPPORTED: u32 = u32::MAX;
#[repr(u32)]
#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum IntermediateEvent {
InputRefused = CDR_INPUT_REFUSED,
#[default]
SubCashIn = CDR_SUBCASHIN,
BccInserted = CDR_BCC_INSERTED,
NotSupported = CDR_NOT_SUPPORTED,
}
impl IntermediateEvent {
pub const fn new() -> Self {
Self::SubCashIn
}
pub const fn create(val: u32) -> Self {
match val {
CDR_INPUT_REFUSED => Self::InputRefused,
CDR_SUBCASHIN => Self::SubCashIn,
CDR_BCC_INSERTED => Self::BccInserted,
_ => Self::NotSupported,
}
}
}
impl From<&IntermediateEvent> for &'static str {
fn from(val: &IntermediateEvent) -> Self {
match val {
IntermediateEvent::InputRefused => "input refused",
IntermediateEvent::SubCashIn => "sub cash in",
IntermediateEvent::BccInserted => "BCC inserted",
IntermediateEvent::NotSupported => "not supported",
}
}
}
impl fmt::Display for IntermediateEvent {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, r#""{}""#, <&str>::from(self))
}
}
impl_xfs_enum!(IntermediateEvent, "intermediateEvent");