From 1cef2ec5efad9060396d548d444d0906e6b8a72b Mon Sep 17 00:00:00 2001 From: David Hoppenbrouwers Date: Fri, 9 Sep 2022 21:32:01 +0200 Subject: [PATCH] Add Usage enum for all pages in usb_hid_usage --- usb_hid_usage/src/button.rs | 2 +- usb_hid_usage/src/lib.rs | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/usb_hid_usage/src/button.rs b/usb_hid_usage/src/button.rs index 058dccb..5836a93 100644 --- a/usb_hid_usage/src/button.rs +++ b/usb_hid_usage/src/button.rs @@ -2,7 +2,7 @@ use core::num::NonZeroU16; pub const PAGE: u16 = 0x09; -#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] +#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] pub enum Usage { NoButton, Button(NonZeroU16), diff --git a/usb_hid_usage/src/lib.rs b/usb_hid_usage/src/lib.rs index 691f3a3..5fe9bf1 100644 --- a/usb_hid_usage/src/lib.rs +++ b/usb_hid_usage/src/lib.rs @@ -48,6 +48,23 @@ macro_rules! page { }) } } + + #[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)] + #[non_exhaustive] + pub enum Usage { + $($v($m::Usage),)* + } + + impl TryFrom<(u16, u16)> for Usage { + type Error = UnknownUsage; + + fn try_from((page, usage): (u16, u16)) -> Result { + Ok(match page { + $($m::PAGE => Self::$v($m::Usage::try_from(usage).map_err(|_| UnknownUsage)?),)* + _ => return Err(UnknownUsage), + }) + } + } }; }