keyboard-codes 0.2.0

Cross-platform keyboard key code mapping and conversion
Documentation
use std::fmt;

/// Keyboard key enumeration
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Key {
    // Function keys
    /// Escape key
    Escape,
    /// Enter/Return key
    Enter,
    /// Tab key
    Tab,
    /// Backspace key
    Backspace,
    /// Space bar
    Space,
    /// Insert key
    Insert,
    /// Delete key
    Delete,
    /// Home key
    Home,
    /// End key
    End,
    /// Page Up key
    PageUp,
    /// Page Down key
    PageDown,
    /// Left arrow key
    ArrowLeft,
    /// Up arrow key
    ArrowUp,
    /// Right arrow key
    ArrowRight,
    /// Down arrow key
    ArrowDown,

    // Alphabet keys
    /// A key
    A,
    /// B key
    B,
    /// C key
    C,
    /// D key
    D,
    /// E key
    E,
    /// F key
    F,
    /// G key
    G,
    /// H key
    H,
    /// I key
    I,
    /// J key
    J,
    /// K key
    K,
    /// L key
    L,
    /// M key
    M,
    /// N key
    N,
    /// O key
    O,
    /// P key
    P,
    /// Q key
    Q,
    /// R key
    R,
    /// S key
    S,
    /// T key
    T,
    /// U key
    U,
    /// V key
    V,
    /// W key
    W,
    /// X key
    X,
    /// Y key
    Y,
    /// Z key
    Z,

    // Number keys
    /// 0 key
    D0,
    /// 1 key
    D1,
    /// 2 key
    D2,
    /// 3 key
    D3,
    /// 4 key
    D4,
    /// 5 key
    D5,
    /// 6 key
    D6,
    /// 7 key
    D7,
    /// 8 key
    D8,
    /// 9 key
    D9,

    // Numpad keys
    /// Numpad 0 key
    Num0,
    /// Numpad 1 key
    Num1,
    /// Numpad 2 key
    Num2,
    /// Numpad 3 key
    Num3,
    /// Numpad 4 key
    Num4,
    /// Numpad 5 key
    Num5,
    /// Numpad 6 key
    Num6,
    /// Numpad 7 key
    Num7,
    /// Numpad 8 key
    Num8,
    /// Numpad 9 key
    Num9,
    /// Numpad multiply key
    NumMultiply,
    /// Numpad add key
    NumAdd,
    /// Numpad subtract key
    NumSubtract,
    /// Numpad divide key
    NumDivide,
    /// Numpad decimal key
    NumDecimal,

    // Function keys
    /// F1 key
    F1,
    /// F2 key
    F2,
    /// F3 key
    F3,
    /// F4 key
    F4,
    /// F5 key
    F5,
    /// F6 key
    F6,
    /// F7 key
    F7,
    /// F8 key
    F8,
    /// F9 key
    F9,
    /// F10 key
    F10,
    /// F11 key
    F11,
    /// F12 key
    F12,
    /// F13 key
    F13,
    /// F14 key
    F14,
    /// F15 key
    F15,
    /// F16 key
    F16,
    /// F17 key
    F17,
    /// F18 key
    F18,
    /// F19 key
    F19,
    /// F20 key
    F20,
    /// F21 key
    F21,
    /// F22 key
    F22,
    /// F23 key
    F23,
    /// F24 key
    F24,

    // Special keys
    /// Caps Lock key
    CapsLock,
    /// Num Lock key
    NumLock,
    /// Scroll Lock key
    ScrollLock,
    /// Pause/Break key
    Pause,
    /// Application/Context Menu key
    Apps,
    /// Sleep key
    Sleep,

    // Media control keys
    /// Media Play/Pause key
    MediaPlayPause,
    /// Media Stop key
    MediaStop,
    /// Media Next Track key
    MediaNext,
    /// Media Previous Track key
    MediaPrevious,
    /// Volume Up key
    VolumeUp,
    /// Volume Down key
    VolumeDown,
    /// Volume Mute key
    VolumeMute,

    // Browser control keys
    /// Browser Back key
    BrowserBack,
    /// Browser Forward key
    BrowserForward,
    /// Browser Refresh key
    BrowserRefresh,
    /// Browser Home key
    BrowserHome,
}

impl Key {
    /// Get the string representation of the key
    pub fn as_str(&self) -> &'static str {
        match self {
            Key::Escape => "Escape",
            Key::Enter => "Enter",
            Key::Tab => "Tab",
            Key::Backspace => "Backspace",
            Key::Space => "Space",
            Key::Insert => "Insert",
            Key::Delete => "Delete",
            Key::Home => "Home",
            Key::End => "End",
            Key::PageUp => "PageUp",
            Key::PageDown => "PageDown",
            Key::ArrowLeft => "ArrowLeft",
            Key::ArrowUp => "ArrowUp",
            Key::ArrowRight => "ArrowRight",
            Key::ArrowDown => "ArrowDown",

            Key::A => "A",
            Key::B => "B",
            Key::C => "C",
            Key::D => "D",
            Key::E => "E",
            Key::F => "F",
            Key::G => "G",
            Key::H => "H",
            Key::I => "I",
            Key::J => "J",
            Key::K => "K",
            Key::L => "L",
            Key::M => "M",
            Key::N => "N",
            Key::O => "O",
            Key::P => "P",
            Key::Q => "Q",
            Key::R => "R",
            Key::S => "S",
            Key::T => "T",
            Key::U => "U",
            Key::V => "V",
            Key::W => "W",
            Key::X => "X",
            Key::Y => "Y",
            Key::Z => "Z",

            Key::D0 => "D0",
            Key::D1 => "D1",
            Key::D2 => "D2",
            Key::D3 => "D3",
            Key::D4 => "D4",
            Key::D5 => "D5",
            Key::D6 => "D6",
            Key::D7 => "D7",
            Key::D8 => "D8",
            Key::D9 => "D9",

            Key::Num0 => "Num0",
            Key::Num1 => "Num1",
            Key::Num2 => "Num2",
            Key::Num3 => "Num3",
            Key::Num4 => "Num4",
            Key::Num5 => "Num5",
            Key::Num6 => "Num6",
            Key::Num7 => "Num7",
            Key::Num8 => "Num8",
            Key::Num9 => "Num9",
            Key::NumMultiply => "NumMultiply",
            Key::NumAdd => "NumAdd",
            Key::NumSubtract => "NumSubtract",
            Key::NumDivide => "NumDivide",
            Key::NumDecimal => "NumDecimal",

            Key::F1 => "F1",
            Key::F2 => "F2",
            Key::F3 => "F3",
            Key::F4 => "F4",
            Key::F5 => "F5",
            Key::F6 => "F6",
            Key::F7 => "F7",
            Key::F8 => "F8",
            Key::F9 => "F9",
            Key::F10 => "F10",
            Key::F11 => "F11",
            Key::F12 => "F12",
            Key::F13 => "F13",
            Key::F14 => "F14",
            Key::F15 => "F15",
            Key::F16 => "F16",
            Key::F17 => "F17",
            Key::F18 => "F18",
            Key::F19 => "F19",
            Key::F20 => "F20",
            Key::F21 => "F21",
            Key::F22 => "F22",
            Key::F23 => "F23",
            Key::F24 => "F24",

            Key::CapsLock => "CapsLock",
            Key::NumLock => "NumLock",
            Key::ScrollLock => "ScrollLock",
            Key::Pause => "Pause",
            Key::Apps => "Apps",
            Key::Sleep => "Sleep",

            Key::MediaPlayPause => "MediaPlayPause",
            Key::MediaStop => "MediaStop",
            Key::MediaNext => "MediaNext",
            Key::MediaPrevious => "MediaPrevious",
            Key::VolumeUp => "VolumeUp",
            Key::VolumeDown => "VolumeDown",
            Key::VolumeMute => "VolumeMute",

            Key::BrowserBack => "BrowserBack",
            Key::BrowserForward => "BrowserForward",
            Key::BrowserRefresh => "BrowserRefresh",
            Key::BrowserHome => "BrowserHome",
        }
    }
}

impl fmt::Display for Key {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        write!(f, "{}", self.as_str())
    }
}