livesplit-hotkey 0.3.0

livesplit-hotkey provides cross-platform global hotkey hooks.
Documentation
use std::str::FromStr;

// Based on https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent/code

#[derive(Debug, Eq, PartialEq, Hash, Copy, Clone)]
pub enum KeyCode {
    Again,
    AltLeft,
    AltRight,
    ArrowDown,
    ArrowLeft,
    ArrowRight,
    ArrowUp,
    AudioVolumeDown,
    AudioVolumeMute,
    AudioVolumeUp,
    Backquote,
    Backslash,
    Backspace,
    BracketLeft,
    BracketRight,
    BrowserBack,
    BrowserFavorites,
    BrowserForward,
    BrowserHome,
    BrowserRefresh,
    BrowserSearch,
    BrowserStop,
    Cancel,
    CapsLock,
    Comma,
    ContextMenu,
    ControlLeft,
    ControlRight,
    Convert,
    Copy,
    Cut,
    Delete,
    Digit0,
    Digit1,
    Digit2,
    Digit3,
    Digit4,
    Digit5,
    Digit6,
    Digit7,
    Digit8,
    Digit9,
    Eject,
    End,
    Enter,
    Equal,
    Escape,
    F1,
    F10,
    F11,
    F12,
    F13,
    F14,
    F15,
    F16,
    F17,
    F18,
    F19,
    F2,
    F20,
    F21,
    F22,
    F23,
    F24,
    F3,
    F4,
    F5,
    F6,
    F7,
    F8,
    F9,
    Find,
    Fn,
    HangulMode,
    Hanja,
    Help,
    Home,
    Insert,
    IntlBackslash,
    IntlRo,
    IntlYen,
    KanaMode,
    KeyA,
    KeyB,
    KeyC,
    KeyD,
    KeyE,
    KeyF,
    KeyG,
    KeyH,
    KeyI,
    KeyJ,
    KeyK,
    KeyL,
    KeyM,
    KeyN,
    KeyO,
    KeyP,
    KeyQ,
    KeyR,
    KeyS,
    KeyT,
    KeyU,
    KeyV,
    KeyW,
    KeyX,
    KeyY,
    KeyZ,
    Lang1,
    Lang2,
    LaunchApp1,
    LaunchApp2,
    LaunchMail,
    LaunchMediaPlayer,
    MediaPlayPause,
    MediaSelect,
    MediaStop,
    MediaTrackNext,
    MediaTrackPrevious,
    MetaLeft,
    MetaRight,
    Minus,
    NonConvert,
    NumLock,
    Numpad0,
    Numpad1,
    Numpad2,
    Numpad3,
    Numpad4,
    Numpad5,
    Numpad6,
    Numpad7,
    Numpad8,
    Numpad9,
    NumpadAdd,
    NumpadChangeSign,
    NumpadComma,
    NumpadDecimal,
    NumpadDivide,
    NumpadEnter,
    NumpadEqual,
    NumpadMultiply,
    NumpadParenLeft,
    NumpadParenRight,
    NumpadSubtract,
    Open,
    OSLeft,
    OSRight,
    PageDown,
    PageUp,
    Paste,
    Pause,
    Period,
    Power,
    PrintScreen,
    Props,
    Quote,
    RomanCharacters,
    ScrollLock,
    Select,
    Semicolon,
    ShiftLeft,
    ShiftRight,
    Slash,
    Sleep,
    Space,
    Tab,
    Undo,
    VolumeDown,
    VolumeMute,
    VolumeUp,
    WakeUp,
}

impl FromStr for KeyCode {
    type Err = ();
    fn from_str(s: &str) -> Result<Self, Self::Err> {
        use self::KeyCode::*;
        Ok(match s {
            "Again" => Again,
            "AltLeft" => AltLeft,
            "AltRight" => AltRight,
            "ArrowDown" => ArrowDown,
            "ArrowLeft" => ArrowLeft,
            "ArrowRight" => ArrowRight,
            "ArrowUp" => ArrowUp,
            "AudioVolumeDown" => AudioVolumeDown,
            "AudioVolumeMute" => AudioVolumeMute,
            "AudioVolumeUp" => AudioVolumeUp,
            "Backquote" => Backquote,
            "Backslash" => Backslash,
            "Backspace" => Backspace,
            "BracketLeft" => BracketLeft,
            "BracketRight" => BracketRight,
            "BrowserBack" => BrowserBack,
            "BrowserFavorites" => BrowserFavorites,
            "BrowserForward" => BrowserForward,
            "BrowserHome" => BrowserHome,
            "BrowserRefresh" => BrowserRefresh,
            "BrowserSearch" => BrowserSearch,
            "BrowserStop" => BrowserStop,
            "Cancel" => Cancel,
            "CapsLock" => CapsLock,
            "Comma" => Comma,
            "ContextMenu" => ContextMenu,
            "ControlLeft" => ControlLeft,
            "ControlRight" => ControlRight,
            "Convert" => Convert,
            "Copy" => Copy,
            "Cut" => Cut,
            "Delete" => Delete,
            "Digit0" => Digit0,
            "Digit1" => Digit1,
            "Digit2" => Digit2,
            "Digit3" => Digit3,
            "Digit4" => Digit4,
            "Digit5" => Digit5,
            "Digit6" => Digit6,
            "Digit7" => Digit7,
            "Digit8" => Digit8,
            "Digit9" => Digit9,
            "Eject" => Eject,
            "End" => End,
            "Enter" => Enter,
            "Equal" => Equal,
            "Escape" => Escape,
            "F1" => F1,
            "F10" => F10,
            "F11" => F11,
            "F12" => F12,
            "F13" => F13,
            "F14" => F14,
            "F15" => F15,
            "F16" => F16,
            "F17" => F17,
            "F18" => F18,
            "F19" => F19,
            "F2" => F2,
            "F20" => F20,
            "F21" => F21,
            "F22" => F22,
            "F23" => F23,
            "F24" => F24,
            "F3" => F3,
            "F4" => F4,
            "F5" => F5,
            "F6" => F6,
            "F7" => F7,
            "F8" => F8,
            "F9" => F9,
            "Find" => Find,
            "Fn" => Fn,
            "HangulMode" => HangulMode,
            "Hanja" => Hanja,
            "Help" => Help,
            "Home" => Home,
            "Insert" => Insert,
            "IntlBackslash" => IntlBackslash,
            "IntlRo" => IntlRo,
            "IntlYen" => IntlYen,
            "KanaMode" => KanaMode,
            "KeyA" => KeyA,
            "KeyB" => KeyB,
            "KeyC" => KeyC,
            "KeyD" => KeyD,
            "KeyE" => KeyE,
            "KeyF" => KeyF,
            "KeyG" => KeyG,
            "KeyH" => KeyH,
            "KeyI" => KeyI,
            "KeyJ" => KeyJ,
            "KeyK" => KeyK,
            "KeyL" => KeyL,
            "KeyM" => KeyM,
            "KeyN" => KeyN,
            "KeyO" => KeyO,
            "KeyP" => KeyP,
            "KeyQ" => KeyQ,
            "KeyR" => KeyR,
            "KeyS" => KeyS,
            "KeyT" => KeyT,
            "KeyU" => KeyU,
            "KeyV" => KeyV,
            "KeyW" => KeyW,
            "KeyX" => KeyX,
            "KeyY" => KeyY,
            "KeyZ" => KeyZ,
            "Lang1" => Lang1,
            "Lang2" => Lang2,
            "LaunchApp1" => LaunchApp1,
            "LaunchApp2" => LaunchApp2,
            "LaunchMail" => LaunchMail,
            "LaunchMediaPlayer" => LaunchMediaPlayer,
            "MediaPlayPause" => MediaPlayPause,
            "MediaSelect" => MediaSelect,
            "MediaStop" => MediaStop,
            "MediaTrackNext" => MediaTrackNext,
            "MediaTrackPrevious" => MediaTrackPrevious,
            "MetaLeft" => MetaLeft,
            "MetaRight" => MetaRight,
            "Minus" => Minus,
            "NonConvert" => NonConvert,
            "NumLock" => NumLock,
            "Numpad0" => Numpad0,
            "Numpad1" => Numpad1,
            "Numpad2" => Numpad2,
            "Numpad3" => Numpad3,
            "Numpad4" => Numpad4,
            "Numpad5" => Numpad5,
            "Numpad6" => Numpad6,
            "Numpad7" => Numpad7,
            "Numpad8" => Numpad8,
            "Numpad9" => Numpad9,
            "NumpadAdd" => NumpadAdd,
            "NumpadChangeSign" => NumpadChangeSign,
            "NumpadComma" => NumpadComma,
            "NumpadDecimal" => NumpadDecimal,
            "NumpadDivide" => NumpadDivide,
            "NumpadEnter" => NumpadEnter,
            "NumpadEqual" => NumpadEqual,
            "NumpadMultiply" => NumpadMultiply,
            "NumpadParenLeft" => NumpadParenLeft,
            "NumpadParenRight" => NumpadParenRight,
            "NumpadSubtract" => NumpadSubtract,
            "Open" => Open,
            "OSLeft" => OSLeft,
            "OSRight" => OSRight,
            "PageDown" => PageDown,
            "PageUp" => PageUp,
            "Paste" => Paste,
            "Pause" => Pause,
            "Period" => Period,
            "Power" => Power,
            "PrintScreen" => PrintScreen,
            "Props" => Props,
            "Quote" => Quote,
            "RomanCharacters" => RomanCharacters,
            "ScrollLock" => ScrollLock,
            "Select" => Select,
            "Semicolon" => Semicolon,
            "ShiftLeft" => ShiftLeft,
            "ShiftRight" => ShiftRight,
            "Slash" => Slash,
            "Sleep" => Sleep,
            "Space" => Space,
            "Tab" => Tab,
            "Undo" => Undo,
            "VolumeDown" => VolumeDown,
            "VolumeMute" => VolumeMute,
            "VolumeUp" => VolumeUp,
            "WakeUp" => WakeUp,
            _ => return Err(()),
        })
    }
}