nuhxboard 0.4.0

A Linux port of NohBoard
use iced::keyboard::KeyCode;
use rdev::{Button, Key};

pub fn mouse_button_code_convert(rdev_button: Button) -> Result<u32, Button> {
    match rdev_button {
        Button::Left => Ok(0),
        Button::Middle => Ok(2),
        Button::Right => Ok(1),
        Button::Unknown(code) => match code {
            8 | 19 => Ok(3),
            9 | 20 => Ok(4),
            _ => Err(rdev_button),
        },
    }
}

pub fn keycode_convert(rdev_key: Key) -> Result<u32, Key> {
    match rdev_key {
        Key::Backspace => Ok(8),
        Key::Tab => Ok(9),
        Key::Return => Ok(13),
        Key::Pause => Ok(19),
        Key::CapsLock => Ok(20),
        Key::Escape => Ok(27),
        Key::Space => Ok(32),
        Key::PageUp => Ok(33),
        Key::PageDown => Ok(34),
        Key::End => Ok(35),
        Key::Home => Ok(36),
        Key::LeftArrow => Ok(37),
        Key::UpArrow => Ok(38),
        Key::RightArrow => Ok(39),
        Key::DownArrow => Ok(40),
        Key::PrintScreen => Ok(44),
        Key::Insert => Ok(45),
        Key::Delete => Ok(46),
        Key::Num0 => Ok(48),
        Key::Num1 => Ok(49),
        Key::Num2 => Ok(50),
        Key::Num3 => Ok(51),
        Key::Num4 => Ok(52),
        Key::Num5 => Ok(53),
        Key::Num6 => Ok(54),
        Key::Num7 => Ok(55),
        Key::Num8 => Ok(56),
        Key::Num9 => Ok(57),
        Key::KeyA => Ok(65),
        Key::KeyB => Ok(66),
        Key::KeyC => Ok(67),
        Key::KeyD => Ok(68),
        Key::KeyE => Ok(69),
        Key::KeyF => Ok(70),
        Key::KeyG => Ok(71),
        Key::KeyH => Ok(72),
        Key::KeyI => Ok(73),
        Key::KeyJ => Ok(74),
        Key::KeyK => Ok(75),
        Key::KeyL => Ok(76),
        Key::KeyM => Ok(77),
        Key::KeyN => Ok(78),
        Key::KeyO => Ok(79),
        Key::KeyP => Ok(80),
        Key::KeyQ => Ok(81),
        Key::KeyR => Ok(82),
        Key::KeyS => Ok(83),
        Key::KeyT => Ok(84),
        Key::KeyU => Ok(85),
        Key::KeyV => Ok(86),
        Key::KeyW => Ok(87),
        Key::KeyX => Ok(88),
        Key::KeyY => Ok(89),
        Key::KeyZ => Ok(90),
        Key::MetaLeft => Ok(91),
        Key::MetaRight => Ok(92),
        Key::Kp0 => Ok(96),
        Key::Kp1 => Ok(97),
        Key::Kp2 => Ok(98),
        Key::Kp3 => Ok(99),
        Key::Kp4 => Ok(100),
        Key::Kp5 => Ok(101),
        Key::Kp6 => Ok(102),
        Key::Kp7 => Ok(103),
        Key::Kp8 => Ok(104),
        Key::Kp9 => Ok(105),
        Key::KpMultiply => Ok(106),
        Key::KpPlus => Ok(107),
        Key::KpMinus => Ok(109),
        Key::KpDelete => Ok(110),
        Key::KpDivide => Ok(111),
        Key::F1 => Ok(112),
        Key::F2 => Ok(113),
        Key::F3 => Ok(114),
        Key::F4 => Ok(115),
        Key::F5 => Ok(116),
        Key::F6 => Ok(117),
        Key::F7 => Ok(118),
        Key::F8 => Ok(119),
        Key::F9 => Ok(120),
        Key::F10 => Ok(121),
        Key::F11 => Ok(122),
        Key::F12 => Ok(123),
        Key::ScrollLock => Ok(145),
        Key::ShiftLeft => Ok(160),
        Key::ShiftRight => Ok(161),
        Key::ControlLeft => Ok(162),
        Key::ControlRight => Ok(163),
        Key::Alt => Ok(164),
        Key::AltGr => Ok(165),
        Key::SemiColon => Ok(186),
        Key::Equal => Ok(187),
        Key::Comma => Ok(188),
        Key::Minus => Ok(189),
        Key::Dot => Ok(190),
        Key::Slash => Ok(191),
        Key::BackQuote => Ok(192),
        Key::LeftBracket => Ok(219),
        Key::BackSlash => Ok(220),
        Key::RightBracket => Ok(221),
        Key::Quote => Ok(222),
        Key::NumLock => Ok(144),
        Key::KpReturn => Ok(1025),
        // Menu
        Key::Unknown(135) => Ok(93),
        _ => Err(rdev_key),
    }
}

pub fn iced_to_rdev(iced_code: iced::keyboard::KeyCode) -> Result<Key, KeyCode> {
    match iced_code {
        KeyCode::Backspace => Ok(Key::Backspace),
        KeyCode::Tab => Ok(Key::Tab),
        KeyCode::Enter => Ok(Key::Return),
        KeyCode::Pause => Ok(Key::Pause),
        KeyCode::Escape => Ok(Key::Escape),
        KeyCode::Space => Ok(Key::Space),
        KeyCode::PageUp => Ok(Key::PageUp),
        KeyCode::PageDown => Ok(Key::PageDown),
        KeyCode::End => Ok(Key::End),
        KeyCode::Home => Ok(Key::Home),
        KeyCode::Left => Ok(Key::LeftArrow),
        KeyCode::Up => Ok(Key::UpArrow),
        KeyCode::Right => Ok(Key::RightArrow),
        KeyCode::Down => Ok(Key::DownArrow),
        KeyCode::Snapshot => Ok(Key::PrintScreen),
        KeyCode::Insert => Ok(Key::Insert),
        KeyCode::Delete => Ok(Key::Delete),
        KeyCode::Key0 => Ok(Key::Num0),
        KeyCode::Key1 => Ok(Key::Num1),
        KeyCode::Key2 => Ok(Key::Num2),
        KeyCode::Key3 => Ok(Key::Num3),
        KeyCode::Key4 => Ok(Key::Num4),
        KeyCode::Key5 => Ok(Key::Num5),
        KeyCode::Key6 => Ok(Key::Num6),
        KeyCode::Key7 => Ok(Key::Num7),
        KeyCode::Key8 => Ok(Key::Num8),
        KeyCode::Key9 => Ok(Key::Num9),
        KeyCode::A => Ok(Key::KeyA),
        KeyCode::B => Ok(Key::KeyB),
        KeyCode::C => Ok(Key::KeyC),
        KeyCode::D => Ok(Key::KeyD),
        KeyCode::E => Ok(Key::KeyE),
        KeyCode::F => Ok(Key::KeyF),
        KeyCode::G => Ok(Key::KeyG),
        KeyCode::H => Ok(Key::KeyH),
        KeyCode::I => Ok(Key::KeyI),
        KeyCode::J => Ok(Key::KeyJ),
        KeyCode::K => Ok(Key::KeyK),
        KeyCode::L => Ok(Key::KeyL),
        KeyCode::M => Ok(Key::KeyM),
        KeyCode::N => Ok(Key::KeyN),
        KeyCode::O => Ok(Key::KeyO),
        KeyCode::P => Ok(Key::KeyP),
        KeyCode::Q => Ok(Key::KeyQ),
        KeyCode::R => Ok(Key::KeyR),
        KeyCode::S => Ok(Key::KeyS),
        KeyCode::T => Ok(Key::KeyT),
        KeyCode::U => Ok(Key::KeyU),
        KeyCode::V => Ok(Key::KeyV),
        KeyCode::W => Ok(Key::KeyW),
        KeyCode::X => Ok(Key::KeyX),
        KeyCode::Y => Ok(Key::KeyY),
        KeyCode::Z => Ok(Key::KeyZ),
        KeyCode::F1 => Ok(Key::F1),
        KeyCode::F2 => Ok(Key::F2),
        KeyCode::F3 => Ok(Key::F3),
        KeyCode::F4 => Ok(Key::F4),
        KeyCode::F5 => Ok(Key::F5),
        KeyCode::F6 => Ok(Key::F6),
        KeyCode::F7 => Ok(Key::F7),
        KeyCode::F8 => Ok(Key::F8),
        KeyCode::F9 => Ok(Key::F9),
        KeyCode::F10 => Ok(Key::F10),
        KeyCode::F11 => Ok(Key::F11),
        KeyCode::F12 => Ok(Key::F12),
        KeyCode::Numlock => Ok(Key::NumLock),
        KeyCode::Numpad0 => Ok(Key::Kp0),
        KeyCode::Numpad1 => Ok(Key::Kp1),
        KeyCode::Numpad2 => Ok(Key::Kp2),
        KeyCode::Numpad3 => Ok(Key::Kp3),
        KeyCode::Numpad4 => Ok(Key::Kp4),
        KeyCode::Numpad5 => Ok(Key::Kp5),
        KeyCode::Numpad6 => Ok(Key::Kp6),
        KeyCode::Numpad7 => Ok(Key::Kp7),
        KeyCode::Numpad8 => Ok(Key::Kp8),
        KeyCode::Numpad9 => Ok(Key::Kp9),
        KeyCode::NumpadAdd => Ok(Key::KpPlus),
        KeyCode::NumpadSubtract => Ok(Key::KpMinus),
        KeyCode::NumpadMultiply => Ok(Key::KpMultiply),
        KeyCode::NumpadDivide => Ok(Key::KpDivide),
        KeyCode::NumpadEnter => Ok(Key::KpReturn),
        KeyCode::LShift => Ok(Key::ShiftLeft),
        KeyCode::RShift => Ok(Key::ShiftRight),
        KeyCode::LControl => Ok(Key::ControlLeft),
        KeyCode::RControl => Ok(Key::ControlRight),
        KeyCode::LAlt => Ok(Key::Alt),
        KeyCode::RAlt => Ok(Key::AltGr),
        KeyCode::Semicolon => Ok(Key::SemiColon),
        KeyCode::Equals => Ok(Key::Equal),
        KeyCode::Comma => Ok(Key::Comma),
        KeyCode::Minus => Ok(Key::Minus),
        KeyCode::Period => Ok(Key::Dot),
        KeyCode::Slash => Ok(Key::Slash),
        KeyCode::LBracket => Ok(Key::LeftBracket),
        KeyCode::RBracket => Ok(Key::RightBracket),
        KeyCode::Backslash => Ok(Key::BackSlash),
        KeyCode::Apostrophe => Ok(Key::Quote),
        KeyCode::Grave => Ok(Key::BackQuote),
        KeyCode::Capital => Ok(Key::CapsLock),
        KeyCode::LWin => Ok(Key::MetaLeft),
        KeyCode::RWin => Ok(Key::MetaRight),
        _ => Err(iced_code),
    }
}