Convert string to key code
rc keymaps list keycodes as strings. These need to be converted to numeric keycodes before the keymap can be loaded. So, add a function to convert a string to keycode. Signed-off-by: Sean Young <sean@mess.org>
This commit is contained in:
parent
f93ca1f13f
commit
d694443d53
3 changed files with 25 additions and 0 deletions
|
@ -182,6 +182,20 @@ macro_rules! evdev_enum {
|
|||
impl $t {
|
||||
$($(#[$attr])* pub const $c: Self = Self($val);)*
|
||||
}
|
||||
impl std::str::FromStr for $t {
|
||||
type Err = crate::EnumParseError;
|
||||
|
||||
fn from_str(s: &str) -> Result<Self, Self::Err> {
|
||||
let map: &[(&'static str, $t)] = &[
|
||||
$((stringify!($c), Self::$c),)*
|
||||
];
|
||||
|
||||
match map.iter().find(|e| e.0 == s) {
|
||||
Some(e) => Ok(e.1),
|
||||
None => Err(crate::EnumParseError(())),
|
||||
}
|
||||
}
|
||||
}
|
||||
impl std::fmt::Debug for $t {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
|
||||
match *self {
|
||||
|
|
|
@ -290,3 +290,6 @@ pub(crate) fn nix_err(err: nix::Error) -> io::Error {
|
|||
pub(crate) unsafe fn cast_to_bytes<T: ?Sized>(mem: &T) -> &[u8] {
|
||||
std::slice::from_raw_parts(mem as *const T as *const u8, std::mem::size_of_val(mem))
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub struct EnumParseError(());
|
||||
|
|
|
@ -555,3 +555,11 @@ evdev_enum!(
|
|||
BTN_TRIGGER_HAPPY39 = 0x2e6,
|
||||
BTN_TRIGGER_HAPPY40 = 0x2e7,
|
||||
);
|
||||
|
||||
#[test]
|
||||
fn from_str() {
|
||||
use std::str::FromStr;
|
||||
|
||||
assert_eq!(Key::from_str("KEY_A"), Ok(Key::KEY_A));
|
||||
assert!(Key::from_str("KEY_FOOBAR").is_err());
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue