1use std::fmt;
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
5#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
6pub enum Key {
7 Escape,
10 Enter,
12 Tab,
14 Backspace,
16 Space,
18 Insert,
20 Delete,
22 Home,
24 End,
26 PageUp,
28 PageDown,
30 ArrowLeft,
32 ArrowUp,
34 ArrowRight,
36 ArrowDown,
38
39 A,
42 B,
44 C,
46 D,
48 E,
50 F,
52 G,
54 H,
56 I,
58 J,
60 K,
62 L,
64 M,
66 N,
68 O,
70 P,
72 Q,
74 R,
76 S,
78 T,
80 U,
82 V,
84 W,
86 X,
88 Y,
90 Z,
92
93 D0,
96 D1,
98 D2,
100 D3,
102 D4,
104 D5,
106 D6,
108 D7,
110 D8,
112 D9,
114
115 Num0,
118 Num1,
120 Num2,
122 Num3,
124 Num4,
126 Num5,
128 Num6,
130 Num7,
132 Num8,
134 Num9,
136 NumMultiply,
138 NumAdd,
140 NumSubtract,
142 NumDivide,
144 NumDecimal,
146
147 F1,
150 F2,
152 F3,
154 F4,
156 F5,
158 F6,
160 F7,
162 F8,
164 F9,
166 F10,
168 F11,
170 F12,
172 F13,
174 F14,
176 F15,
178 F16,
180 F17,
182 F18,
184 F19,
186 F20,
188 F21,
190 F22,
192 F23,
194 F24,
196
197 CapsLock,
200 NumLock,
202 ScrollLock,
204 Pause,
206 Apps,
208 Sleep,
210
211 MediaPlayPause,
214 MediaStop,
216 MediaNext,
218 MediaPrevious,
220 VolumeUp,
222 VolumeDown,
224 VolumeMute,
226
227 BrowserBack,
230 BrowserForward,
232 BrowserRefresh,
234 BrowserHome,
236}
237
238impl Key {
239 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}