usbhidusage 0.1.3

A general purpose library for working with usb Human Interface Device Descriptors from the HID Usage Tables for Universal Serial Bus (USB) v1.5
Documentation
#[derive(Clone, Copy, PartialEq, PartialOrd, Ord, Eq, Hash, Debug, Default)]
#[non_exhaustive]
#[repr(u16)]
pub enum PowerUsage {
    #[default]
    Undefined,
    iName,
    PresentStatus,
    ChangedStatus,
    UPS,
    PowerSupply,
    Reserved06_0F(u16),
    BatterySystem = 0x10,
    BatterySystemId,
    Battery,
    BatteryId,
    Charger,
    ChargerId,
    PowerConverter,
    PowerConverterId,
    OutletSystem,
    OutletSystemId,
    Input,
    InputId,
    Output,
    OutputId,
    Flow,
    FlowId,
    Outlet,
    OutletId,
    Gang,
    GangId,
    PowerSummary,
    PowerSummaryId,
    Reserved26_2F(u16),
    Voltage = 0x30,
    Current,
    Frequency,
    ApparentPower,
    ActivePower,
    PercentLoad,
    Temperature,
    Humidity,
    BadCount,
    Reserved39_3F(u16),
    ConfigVoltage = 0x40,
    ConfigCurrent,
    ConfigFrequency,
    ConfigApparentPower,
    ConfigActivePower,
    ConfigPercentLoad,
    ConfigTemperature,
    ConfigHumidity,
    Reserved48_4F(u16),
    SwitchOnControl = 0x50,
    SwitchOffControl,
    ToggleControl,
    LowVoltageTransfer,
    HighVoltageTransfer,
    DelayBeforeReboot,
    DelayBeforeStartup,
    DelayBeforeShutdown,
    Test,
    ModuleReset,
    AudibleAlarmControl,
    Reserved5B_5F(u16),
    Present = 0x60,
    Good,
    InternalFailure,
    VoltagOutOfRange,
    FrequencyOutOfRange,
    Overload,
    OverCharged,
    OverTemperature,
    ShutdownRequested,
    ShutdownImminent,
    Reserved6A,
    SwitchOn_Off,
    Switchable,
    Used,
    Boost,
    Buck,
    Initialized,
    Tested,
    AwaitingPower,
    CommunicationLost,
    Reserved74_FC(u16),
    iManufacturer = 0xFD,
    iProduct,
    iSerialNumber,
    Reserved100_FFFF(u16),
}
impl<T> From<T> for PowerUsage
where
    T: TryInto<u16>,
{
    fn from(value: T) -> Self {
        let value = value.try_into().unwrap_or(0);
        match value {
            0 => Self::Undefined,
            1 => Self::iName,
            2 => Self::PresentStatus,
            3 => Self::ChangedStatus,
            4 => Self::UPS,
            5 => Self::PowerSupply,
            6..16 => Self::Reserved06_0F(value),
            16 => Self::BatterySystem,
            17 => Self::BatterySystemId,
            18 => Self::Battery,
            19 => Self::BatteryId,
            20 => Self::Charger,
            21 => Self::ChargerId,
            22 => Self::PowerConverter,
            23 => Self::PowerConverterId,
            24 => Self::OutletSystem,
            25 => Self::OutletSystemId,
            26 => Self::Input,
            27 => Self::InputId,
            28 => Self::Output,
            29 => Self::OutputId,
            30 => Self::Flow,
            31 => Self::FlowId,
            32 => Self::Outlet,
            33 => Self::OutletId,
            34 => Self::Gang,
            35 => Self::GangId,
            36 => Self::PowerSummary,
            37 => Self::PowerSummaryId,
            38..48 => Self::Reserved26_2F(value),
            48 => Self::Voltage,
            49 => Self::Current,
            50 => Self::Frequency,
            51 => Self::ApparentPower,
            52 => Self::ActivePower,
            53 => Self::PercentLoad,
            54 => Self::Temperature,
            55 => Self::Humidity,
            56 => Self::BadCount,
            57..64 => Self::Reserved39_3F(value),
            64 => Self::ConfigVoltage,
            65 => Self::ConfigCurrent,
            66 => Self::ConfigFrequency,
            67 => Self::ConfigApparentPower,
            68 => Self::ConfigActivePower,
            69 => Self::ConfigPercentLoad,
            70 => Self::ConfigTemperature,
            71 => Self::ConfigHumidity,
            72..80 => Self::Reserved48_4F(value),
            80 => Self::SwitchOnControl,
            81 => Self::SwitchOffControl,
            82 => Self::ToggleControl,
            83 => Self::LowVoltageTransfer,
            84 => Self::HighVoltageTransfer,
            85 => Self::DelayBeforeReboot,
            86 => Self::DelayBeforeStartup,
            87 => Self::DelayBeforeShutdown,
            88 => Self::Test,
            89 => Self::ModuleReset,
            90 => Self::AudibleAlarmControl,
            91..96 => Self::Reserved5B_5F(value),
            96 => Self::Present,
            97 => Self::Good,
            98 => Self::InternalFailure,
            99 => Self::VoltagOutOfRange,
            100 => Self::FrequencyOutOfRange,
            101 => Self::Overload,
            102 => Self::OverCharged,
            103 => Self::OverTemperature,
            104 => Self::ShutdownRequested,
            105 => Self::ShutdownImminent,
            106 => Self::Reserved6A,
            107 => Self::SwitchOn_Off,
            108 => Self::Switchable,
            109 => Self::Used,
            110 => Self::Boost,
            111 => Self::Buck,
            112 => Self::Initialized,
            113 => Self::Tested,
            114 => Self::AwaitingPower,
            115 => Self::CommunicationLost,
            116..253 => Self::Reserved74_FC(value),
            253 => Self::iManufacturer,
            254 => Self::iProduct,
            255 => Self::iSerialNumber,
            256..=65535 => Self::Reserved100_FFFF(value),
        }
    }
}