mki_fork 0.2.1

Windows and Linux library for registring global input hooks and simulating keyboard and mouse events. This is a basic fork from mki to update the 'input' dependency that uses an updated libinput 1.19.1 version vs 1.19.0.
Documentation
use serde::{Deserialize, Serialize};
use std::fmt;
use std::fmt::Formatter;
use std::str::FromStr;

#[derive(Copy, Clone, Ord, PartialOrd, Hash, Eq, PartialEq, Debug, Serialize, Deserialize)]
pub enum Keyboard {
    A,
    B,
    C,
    D,
    E,
    F,
    G,
    H,
    I,
    J,
    K,
    L,
    M,
    N,
    O,
    P,
    Q,
    R,
    S,
    T,
    U,
    V,
    W,
    X,
    Y,
    Z,
    Number0,
    Number1,
    Number2,
    Number3,
    Number4,
    Number5,
    Number6,
    Number7,
    Number8,
    Number9,
    LeftAlt,
    RightAlt,
    LeftShift,
    RightShift,
    LeftControl,
    RightControl,
    BackSpace,
    Tab,
    Enter,
    Escape,
    Space,
    PageUp,
    PageDown,
    Home,
    Left,
    Up,
    Right,
    Down,
    Print,
    PrintScreen,
    Insert,
    Delete,
    LeftWindows,
    RightWindows,
    Comma,         // ,<
    Period,        // .>
    Slash,         // /?
    SemiColon,     // ;:
    Apostrophe,    // '"
    LeftBrace,     // [{
    BackwardSlash, // \|
    RightBrace,    // ]}
    Grave,         // `~
    F1,
    F2,
    F3,
    F4,
    F5,
    F6,
    F7,
    F8,
    F9,
    F10,
    F11,
    F12,
    F13,
    F14,
    F15,
    F16,
    F17,
    F18,
    F19,
    F20,
    F21,
    F22,
    F23,
    F24,
    NumLock,
    ScrollLock,
    CapsLock,
    Numpad0,
    Numpad1,
    Numpad2,
    Numpad3,
    Numpad4,
    Numpad5,
    Numpad6,
    Numpad7,
    Numpad8,
    Numpad9,
    Multiply,
    Add,
    Separator,
    Subtract,
    Decimal,
    Divide,
    Other(i32),
}

impl FromStr for Keyboard {
    type Err = ();

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        let parsed = match s {
            "A" => Keyboard::A,
            "B" => Keyboard::B,
            "C" => Keyboard::C,
            "D" => Keyboard::D,
            "E" => Keyboard::E,
            "F" => Keyboard::F,
            "G" => Keyboard::G,
            "H" => Keyboard::H,
            "I" => Keyboard::I,
            "J" => Keyboard::J,
            "K" => Keyboard::K,
            "L" => Keyboard::L,
            "M" => Keyboard::M,
            "N" => Keyboard::N,
            "O" => Keyboard::O,
            "P" => Keyboard::P,
            "Q" => Keyboard::Q,
            "R" => Keyboard::R,
            "S" => Keyboard::S,
            "T" => Keyboard::T,
            "U" => Keyboard::U,
            "V" => Keyboard::V,
            "W" => Keyboard::W,
            "X" => Keyboard::X,
            "Y" => Keyboard::Y,
            "Z" => Keyboard::Z,
            "0" => Keyboard::Number0,
            "1" => Keyboard::Number1,
            "2" => Keyboard::Number2,
            "3" => Keyboard::Number3,
            "4" => Keyboard::Number4,
            "5" => Keyboard::Number5,
            "6" => Keyboard::Number6,
            "7" => Keyboard::Number7,
            "8" => Keyboard::Number8,
            "9" => Keyboard::Number9,
            "LeftAlt" => Keyboard::LeftAlt,
            "RightAlt" => Keyboard::RightAlt,
            "LeftShift" => Keyboard::LeftShift,
            "RightShift" => Keyboard::RightShift,
            "LeftControl" => Keyboard::LeftControl,
            "RightControl" => Keyboard::RightControl,
            "BackSpace" => Keyboard::BackSpace,
            "Tab" | "	" => Keyboard::Tab,
            "Enter" | "\n" => Keyboard::Enter,
            "Escape" => Keyboard::Escape,
            "Space" | " " => Keyboard::Space,
            "PageUp" => Keyboard::PageUp,
            "PageDown" => Keyboard::PageDown,
            "Home" => Keyboard::Home,
            "Left" => Keyboard::Left,
            "Up" => Keyboard::Up,
            "Right" => Keyboard::Right,
            "Down" => Keyboard::Down,
            "Print" => Keyboard::Print,
            "PrintScreen" => Keyboard::PrintScreen,
            "Insert" => Keyboard::Insert,
            "Delete" => Keyboard::Delete,
            "LeftWindows" => Keyboard::LeftWindows,
            "RightWindows" => Keyboard::RightWindows,
            "Comma" | "," => Keyboard::Comma,
            "Period" | "." => Keyboard::Period,
            "Slash" | "/" => Keyboard::Slash,
            "SemiColon" | ";" | ":" => Keyboard::SemiColon,
            "Apostrophe" | "'" | "\"" => Keyboard::Apostrophe,
            "LeftBrace" | "[" => Keyboard::LeftBrace,
            "BackwardSlash" | "\\" => Keyboard::BackwardSlash,
            "RightBrace" | "]" => Keyboard::RightBrace,
            "Grave" | "`" => Keyboard::Grave,
            "F1" => Keyboard::F1,
            "F2" => Keyboard::F2,
            "F3" => Keyboard::F3,
            "F4" => Keyboard::F4,
            "F5" => Keyboard::F5,
            "F6" => Keyboard::F6,
            "F7" => Keyboard::F7,
            "F8" => Keyboard::F8,
            "F9" => Keyboard::F9,
            "F10" => Keyboard::F10,
            "F11" => Keyboard::F11,
            "F12" => Keyboard::F12,
            "F13" => Keyboard::F13,
            "F14" => Keyboard::F14,
            "F15" => Keyboard::F15,
            "F16" => Keyboard::F16,
            "F17" => Keyboard::F17,
            "F18" => Keyboard::F18,
            "F19" => Keyboard::F19,
            "F20" => Keyboard::F20,
            "F21" => Keyboard::F21,
            "F22" => Keyboard::F22,
            "F23" => Keyboard::F23,
            "F24" => Keyboard::F24,
            "NumLock" => Keyboard::NumLock,
            "ScrollLock" => Keyboard::ScrollLock,
            "CapsLock" => Keyboard::CapsLock,
            "Numpad0" => Keyboard::Numpad0,
            "Numpad1" => Keyboard::Numpad1,
            "Numpad2" => Keyboard::Numpad2,
            "Numpad3" => Keyboard::Numpad3,
            "Numpad4" => Keyboard::Numpad4,
            "Numpad5" => Keyboard::Numpad5,
            "Numpad6" => Keyboard::Numpad6,
            "Numpad7" => Keyboard::Numpad7,
            "Numpad8" => Keyboard::Numpad8,
            "Numpad9" => Keyboard::Numpad9,
            "Multiply" => Keyboard::Multiply,
            "Add" => Keyboard::Add,
            "Separator" => Keyboard::Separator,
            "Subtract" => Keyboard::Subtract,
            "Decimal" => Keyboard::Decimal,
            "Divide" => Keyboard::Divide,
            _ => return Err(()),
        };
        Ok(parsed)
    }
}

impl fmt::Display for Keyboard {
    fn fmt(&self, f: &mut Formatter<'_>) -> fmt::Result {
        let code: i32 = (*self).into();
        f.write_fmt(format_args!("{:?}({})", self, code))?;
        Ok(())
    }
}