jcm/function_status/
unit_availability.rs

1use std::fmt;
2
3/// Represents whether the device unit is functional.
4#[repr(u8)]
5#[derive(Clone, Copy, Debug, Eq, PartialEq)]
6pub enum UnitAvailability {
7    Available = 0,
8    NotFunctional = 1,
9}
10
11impl UnitAvailability {
12    /// Creates a new [UnitAvailability].
13    pub const fn new() -> Self {
14        Self::Available
15    }
16
17    /// Infallible function to convert a [`u8`] into a [UnitAvailability].
18    pub const fn from_u8(val: u8) -> Self {
19        match val & 0x1 {
20            0 => Self::Available,
21            _ => Self::NotFunctional,
22        }
23    }
24
25    /// Infallible function to convert a [UnitAvailability] into a [`u8`].
26    pub const fn to_u8(&self) -> u8 {
27        *self as u8
28    }
29}
30
31impl Default for UnitAvailability {
32    fn default() -> Self {
33        Self::new()
34    }
35}
36
37impl From<UnitAvailability> for &'static str {
38    fn from(val: UnitAvailability) -> Self {
39        match val {
40            UnitAvailability::Available => "available",
41            UnitAvailability::NotFunctional => "not functional",
42        }
43    }
44}
45
46impl From<&UnitAvailability> for &'static str {
47    fn from(val: &UnitAvailability) -> Self {
48        (*val).into()
49    }
50}
51
52impl fmt::Display for UnitAvailability {
53    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
54        write!(f, r#""{}""#, <&str>::from(self))
55    }
56}