use std::fmt;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub enum Key {
Escape,
Enter,
Tab,
Backspace,
Space,
Insert,
Delete,
Home,
End,
PageUp,
PageDown,
ArrowLeft,
ArrowUp,
ArrowRight,
ArrowDown,
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,
D0,
D1,
D2,
D3,
D4,
D5,
D6,
D7,
D8,
D9,
Num0,
Num1,
Num2,
Num3,
Num4,
Num5,
Num6,
Num7,
Num8,
Num9,
NumMultiply,
NumAdd,
NumSubtract,
NumDivide,
NumDecimal,
F1,
F2,
F3,
F4,
F5,
F6,
F7,
F8,
F9,
F10,
F11,
F12,
F13,
F14,
F15,
F16,
F17,
F18,
F19,
F20,
F21,
F22,
F23,
F24,
CapsLock,
NumLock,
ScrollLock,
Pause,
Apps,
Sleep,
MediaPlayPause,
MediaStop,
MediaNext,
MediaPrevious,
VolumeUp,
VolumeDown,
VolumeMute,
BrowserBack,
BrowserForward,
BrowserRefresh,
BrowserHome,
}
impl 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())
}
}