use std::fmt;
use super::HardwareStatus;
pub const DEVICE_STATUS_CHANGED: u32 = 6162;
pub const HARDWARE_ERROR: u32 = 6174;
pub const USER_ERROR: u32 = 6175;
pub const OFF_LINE: u32 = 6179;
pub const ON_LINE: u32 = 6180;
#[repr(u32)]
#[derive(Clone, Copy, Debug, Default, PartialEq, serde::Deserialize, serde::Serialize)]
pub enum DeviceStatus {
Changed = DEVICE_STATUS_CHANGED,
HardwareError = HARDWARE_ERROR,
UserError = USER_ERROR,
Offline = OFF_LINE,
#[default]
Online = ON_LINE,
}
impl DeviceStatus {
pub const fn new() -> Self {
Self::Online
}
pub const fn create(val: u32) -> Self {
match val {
DEVICE_STATUS_CHANGED => Self::Changed,
HARDWARE_ERROR => Self::HardwareError,
USER_ERROR => Self::UserError,
OFF_LINE => Self::Offline,
ON_LINE => Self::Online,
_ => Self::HardwareError,
}
}
}
impl From<DeviceStatus> for HardwareStatus {
fn from(val: DeviceStatus) -> Self {
match val {
DeviceStatus::Online => Self::Ok,
DeviceStatus::Changed => Self::Notification,
DeviceStatus::Offline => Self::Missing,
DeviceStatus::HardwareError | DeviceStatus::UserError => Self::Error,
}
}
}
impl From<DeviceStatus> for &'static str {
fn from(val: DeviceStatus) -> Self {
match val {
DeviceStatus::Changed => "changed",
DeviceStatus::HardwareError => "hardware error",
DeviceStatus::UserError => "user error",
DeviceStatus::Offline => "offline",
DeviceStatus::Online => "online",
}
}
}
impl From<&DeviceStatus> for &'static str {
fn from(val: &DeviceStatus) -> Self {
(*val).into()
}
}
impl fmt::Display for DeviceStatus {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", <&str>::from(self))
}
}
impl_xfs_enum!(DeviceStatus, "deviceStatus");