keyboard_codes/types/
key.rs

1use std::fmt;
2
3/// Keyboard key enumeration
4#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum Key {
7    // Function keys
8    /// Escape key
9    Escape,
10    /// Enter/Return key
11    Enter,
12    /// Tab key
13    Tab,
14    /// Backspace key
15    Backspace,
16    /// Space bar
17    Space,
18    /// Insert key
19    Insert,
20    /// Delete key
21    Delete,
22    /// Home key
23    Home,
24    /// End key
25    End,
26    /// Page Up key
27    PageUp,
28    /// Page Down key
29    PageDown,
30    /// Left arrow key
31    ArrowLeft,
32    /// Up arrow key
33    ArrowUp,
34    /// Right arrow key
35    ArrowRight,
36    /// Down arrow key
37    ArrowDown,
38
39    // Alphabet keys
40    /// A key
41    A,
42    /// B key
43    B,
44    /// C key
45    C,
46    /// D key
47    D,
48    /// E key
49    E,
50    /// F key
51    F,
52    /// G key
53    G,
54    /// H key
55    H,
56    /// I key
57    I,
58    /// J key
59    J,
60    /// K key
61    K,
62    /// L key
63    L,
64    /// M key
65    M,
66    /// N key
67    N,
68    /// O key
69    O,
70    /// P key
71    P,
72    /// Q key
73    Q,
74    /// R key
75    R,
76    /// S key
77    S,
78    /// T key
79    T,
80    /// U key
81    U,
82    /// V key
83    V,
84    /// W key
85    W,
86    /// X key
87    X,
88    /// Y key
89    Y,
90    /// Z key
91    Z,
92
93    // Number keys
94    /// 0 key
95    D0,
96    /// 1 key
97    D1,
98    /// 2 key
99    D2,
100    /// 3 key
101    D3,
102    /// 4 key
103    D4,
104    /// 5 key
105    D5,
106    /// 6 key
107    D6,
108    /// 7 key
109    D7,
110    /// 8 key
111    D8,
112    /// 9 key
113    D9,
114
115    // Numpad keys
116    /// Numpad 0 key
117    Num0,
118    /// Numpad 1 key
119    Num1,
120    /// Numpad 2 key
121    Num2,
122    /// Numpad 3 key
123    Num3,
124    /// Numpad 4 key
125    Num4,
126    /// Numpad 5 key
127    Num5,
128    /// Numpad 6 key
129    Num6,
130    /// Numpad 7 key
131    Num7,
132    /// Numpad 8 key
133    Num8,
134    /// Numpad 9 key
135    Num9,
136    /// Numpad multiply key
137    NumMultiply,
138    /// Numpad add key
139    NumAdd,
140    /// Numpad subtract key
141    NumSubtract,
142    /// Numpad divide key
143    NumDivide,
144    /// Numpad decimal key
145    NumDecimal,
146
147    // Function keys
148    /// F1 key
149    F1,
150    /// F2 key
151    F2,
152    /// F3 key
153    F3,
154    /// F4 key
155    F4,
156    /// F5 key
157    F5,
158    /// F6 key
159    F6,
160    /// F7 key
161    F7,
162    /// F8 key
163    F8,
164    /// F9 key
165    F9,
166    /// F10 key
167    F10,
168    /// F11 key
169    F11,
170    /// F12 key
171    F12,
172    /// F13 key
173    F13,
174    /// F14 key
175    F14,
176    /// F15 key
177    F15,
178    /// F16 key
179    F16,
180    /// F17 key
181    F17,
182    /// F18 key
183    F18,
184    /// F19 key
185    F19,
186    /// F20 key
187    F20,
188    /// F21 key
189    F21,
190    /// F22 key
191    F22,
192    /// F23 key
193    F23,
194    /// F24 key
195    F24,
196
197    // Special keys
198    /// Caps Lock key
199    CapsLock,
200    /// Num Lock key
201    NumLock,
202    /// Scroll Lock key
203    ScrollLock,
204    /// Pause/Break key
205    Pause,
206    /// Application/Context Menu key
207    Apps,
208    /// Sleep key
209    Sleep,
210
211    // Media control keys
212    /// Media Play/Pause key
213    MediaPlayPause,
214    /// Media Stop key
215    MediaStop,
216    /// Media Next Track key
217    MediaNext,
218    /// Media Previous Track key
219    MediaPrevious,
220    /// Volume Up key
221    VolumeUp,
222    /// Volume Down key
223    VolumeDown,
224    /// Volume Mute key
225    VolumeMute,
226
227    // Browser control keys
228    /// Browser Back key
229    BrowserBack,
230    /// Browser Forward key
231    BrowserForward,
232    /// Browser Refresh key
233    BrowserRefresh,
234    /// Browser Home key
235    BrowserHome,
236}
237
238impl Key {
239    /// Get the string representation of the key
240    pub fn as_str(&self) -> &'static str {
241        match self {
242            Key::Escape => "Escape",
243            Key::Enter => "Enter",
244            Key::Tab => "Tab",
245            Key::Backspace => "Backspace",
246            Key::Space => "Space",
247            Key::Insert => "Insert",
248            Key::Delete => "Delete",
249            Key::Home => "Home",
250            Key::End => "End",
251            Key::PageUp => "PageUp",
252            Key::PageDown => "PageDown",
253            Key::ArrowLeft => "ArrowLeft",
254            Key::ArrowUp => "ArrowUp",
255            Key::ArrowRight => "ArrowRight",
256            Key::ArrowDown => "ArrowDown",
257
258            Key::A => "A",
259            Key::B => "B",
260            Key::C => "C",
261            Key::D => "D",
262            Key::E => "E",
263            Key::F => "F",
264            Key::G => "G",
265            Key::H => "H",
266            Key::I => "I",
267            Key::J => "J",
268            Key::K => "K",
269            Key::L => "L",
270            Key::M => "M",
271            Key::N => "N",
272            Key::O => "O",
273            Key::P => "P",
274            Key::Q => "Q",
275            Key::R => "R",
276            Key::S => "S",
277            Key::T => "T",
278            Key::U => "U",
279            Key::V => "V",
280            Key::W => "W",
281            Key::X => "X",
282            Key::Y => "Y",
283            Key::Z => "Z",
284
285            Key::D0 => "D0",
286            Key::D1 => "D1",
287            Key::D2 => "D2",
288            Key::D3 => "D3",
289            Key::D4 => "D4",
290            Key::D5 => "D5",
291            Key::D6 => "D6",
292            Key::D7 => "D7",
293            Key::D8 => "D8",
294            Key::D9 => "D9",
295
296            Key::Num0 => "Num0",
297            Key::Num1 => "Num1",
298            Key::Num2 => "Num2",
299            Key::Num3 => "Num3",
300            Key::Num4 => "Num4",
301            Key::Num5 => "Num5",
302            Key::Num6 => "Num6",
303            Key::Num7 => "Num7",
304            Key::Num8 => "Num8",
305            Key::Num9 => "Num9",
306            Key::NumMultiply => "NumMultiply",
307            Key::NumAdd => "NumAdd",
308            Key::NumSubtract => "NumSubtract",
309            Key::NumDivide => "NumDivide",
310            Key::NumDecimal => "NumDecimal",
311
312            Key::F1 => "F1",
313            Key::F2 => "F2",
314            Key::F3 => "F3",
315            Key::F4 => "F4",
316            Key::F5 => "F5",
317            Key::F6 => "F6",
318            Key::F7 => "F7",
319            Key::F8 => "F8",
320            Key::F9 => "F9",
321            Key::F10 => "F10",
322            Key::F11 => "F11",
323            Key::F12 => "F12",
324            Key::F13 => "F13",
325            Key::F14 => "F14",
326            Key::F15 => "F15",
327            Key::F16 => "F16",
328            Key::F17 => "F17",
329            Key::F18 => "F18",
330            Key::F19 => "F19",
331            Key::F20 => "F20",
332            Key::F21 => "F21",
333            Key::F22 => "F22",
334            Key::F23 => "F23",
335            Key::F24 => "F24",
336
337            Key::CapsLock => "CapsLock",
338            Key::NumLock => "NumLock",
339            Key::ScrollLock => "ScrollLock",
340            Key::Pause => "Pause",
341            Key::Apps => "Apps",
342            Key::Sleep => "Sleep",
343
344            Key::MediaPlayPause => "MediaPlayPause",
345            Key::MediaStop => "MediaStop",
346            Key::MediaNext => "MediaNext",
347            Key::MediaPrevious => "MediaPrevious",
348            Key::VolumeUp => "VolumeUp",
349            Key::VolumeDown => "VolumeDown",
350            Key::VolumeMute => "VolumeMute",
351
352            Key::BrowserBack => "BrowserBack",
353            Key::BrowserForward => "BrowserForward",
354            Key::BrowserRefresh => "BrowserRefresh",
355            Key::BrowserHome => "BrowserHome",
356        }
357    }
358}
359
360impl fmt::Display for Key {
361    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
362        write!(f, "{}", self.as_str())
363    }
364}