keyboard_types/code.rs
1
2// AUTO GENERATED CODE - DO NOT EDIT
3#![cfg_attr(rustfmt, rustfmt_skip)]
4
5use std::fmt::{self, Display};
6use std::str::FromStr;
7use std::error::Error;
8
9/// Code is the physical position of a key.
10///
11/// The names are based on the US keyboard. If the key
12/// is not present on US keyboards a name from another
13/// layout is used.
14///
15/// Specification:
16/// <https://w3c.github.io/uievents-code/>
17#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash)]
18#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
19#[non_exhaustive]
20pub enum Code {
21 /// <code class="keycap">`~</code> on a US keyboard. This is the <code class="keycap">半角/全角/漢字</code> (<span class="unicode">hankaku/zenkaku/kanji</span>) key on Japanese keyboards
22 Backquote,
23 /// Used for both the US <code class="keycap">\|</code> (on the 101-key layout) and also for the key
24 /// located between the <code class="keycap">"</code> and <code class="keycap">Enter</code> keys on row C of the 102-,
25 /// 104- and 106-key layouts.
26 /// Labelled <code class="keycap">#~</code> on a UK (102) keyboard.
27 Backslash,
28 /// <code class="keycap">[{</code> on a US keyboard.
29 BracketLeft,
30 /// <code class="keycap">]}</code> on a US keyboard.
31 BracketRight,
32 /// <code class="keycap">,<</code> on a US keyboard.
33 Comma,
34 /// <code class="keycap">0)</code> on a US keyboard.
35 Digit0,
36 /// <code class="keycap">1!</code> on a US keyboard.
37 Digit1,
38 /// <code class="keycap">2@</code> on a US keyboard.
39 Digit2,
40 /// <code class="keycap">3#</code> on a US keyboard.
41 Digit3,
42 /// <code class="keycap">4$</code> on a US keyboard.
43 Digit4,
44 /// <code class="keycap">5%</code> on a US keyboard.
45 Digit5,
46 /// <code class="keycap">6^</code> on a US keyboard.
47 Digit6,
48 /// <code class="keycap">7&</code> on a US keyboard.
49 Digit7,
50 /// <code class="keycap">8*</code> on a US keyboard.
51 Digit8,
52 /// <code class="keycap">9(</code> on a US keyboard.
53 Digit9,
54 /// <code class="keycap">=+</code> on a US keyboard.
55 Equal,
56 /// Located between the left <code class="keycap">Shift</code> and <code class="keycap">Z</code> keys.
57 /// Labelled <code class="keycap">\|</code> on a UK keyboard.
58 IntlBackslash,
59 /// Located between the <code class="keycap">/</code> and right <code class="keycap">Shift</code> keys.
60 /// Labelled <code class="keycap">\ろ</code> (<span class="unicode">ro</span>) on a Japanese keyboard.
61 IntlRo,
62 /// Located between the <code class="keycap">=</code> and <code class="keycap">Backspace</code> keys.
63 /// Labelled <code class="keycap">¥</code> (<span class="unicode">yen</span>) on a Japanese keyboard. <code class="keycap">\/</code> on a
64 /// Russian keyboard.
65 IntlYen,
66 /// <code class="keycap">a</code> on a US keyboard.
67 /// Labelled <code class="keycap">q</code> on an AZERTY (e.g., French) keyboard.
68 KeyA,
69 /// <code class="keycap">b</code> on a US keyboard.
70 KeyB,
71 /// <code class="keycap">c</code> on a US keyboard.
72 KeyC,
73 /// <code class="keycap">d</code> on a US keyboard.
74 KeyD,
75 /// <code class="keycap">e</code> on a US keyboard.
76 KeyE,
77 /// <code class="keycap">f</code> on a US keyboard.
78 KeyF,
79 /// <code class="keycap">g</code> on a US keyboard.
80 KeyG,
81 /// <code class="keycap">h</code> on a US keyboard.
82 KeyH,
83 /// <code class="keycap">i</code> on a US keyboard.
84 KeyI,
85 /// <code class="keycap">j</code> on a US keyboard.
86 KeyJ,
87 /// <code class="keycap">k</code> on a US keyboard.
88 KeyK,
89 /// <code class="keycap">l</code> on a US keyboard.
90 KeyL,
91 /// <code class="keycap">m</code> on a US keyboard.
92 KeyM,
93 /// <code class="keycap">n</code> on a US keyboard.
94 KeyN,
95 /// <code class="keycap">o</code> on a US keyboard.
96 KeyO,
97 /// <code class="keycap">p</code> on a US keyboard.
98 KeyP,
99 /// <code class="keycap">q</code> on a US keyboard.
100 /// Labelled <code class="keycap">a</code> on an AZERTY (e.g., French) keyboard.
101 KeyQ,
102 /// <code class="keycap">r</code> on a US keyboard.
103 KeyR,
104 /// <code class="keycap">s</code> on a US keyboard.
105 KeyS,
106 /// <code class="keycap">t</code> on a US keyboard.
107 KeyT,
108 /// <code class="keycap">u</code> on a US keyboard.
109 KeyU,
110 /// <code class="keycap">v</code> on a US keyboard.
111 KeyV,
112 /// <code class="keycap">w</code> on a US keyboard.
113 /// Labelled <code class="keycap">z</code> on an AZERTY (e.g., French) keyboard.
114 KeyW,
115 /// <code class="keycap">x</code> on a US keyboard.
116 KeyX,
117 /// <code class="keycap">y</code> on a US keyboard.
118 /// Labelled <code class="keycap">z</code> on a QWERTZ (e.g., German) keyboard.
119 KeyY,
120 /// <code class="keycap">z</code> on a US keyboard.
121 /// Labelled <code class="keycap">w</code> on an AZERTY (e.g., French) keyboard, and <code class="keycap">y</code> on a
122 /// QWERTZ (e.g., German) keyboard.
123 KeyZ,
124 /// <code class="keycap">-_</code> on a US keyboard.
125 Minus,
126 /// <code class="keycap">.></code> on a US keyboard.
127 Period,
128 /// <code class="keycap">'"</code> on a US keyboard.
129 Quote,
130 /// <code class="keycap">;:</code> on a US keyboard.
131 Semicolon,
132 /// <code class="keycap">/?</code> on a US keyboard.
133 Slash,
134 /// <code class="keycap">Alt</code>, <code class="keycap">Option</code> or <code class="keycap">⌥</code>.
135 AltLeft,
136 /// <code class="keycap">Alt</code>, <code class="keycap">Option</code> or <code class="keycap">⌥</code>.
137 /// This is labelled <code class="keycap">AltGr</code> key on many keyboard layouts.
138 AltRight,
139 /// <code class="keycap">Backspace</code> or <code class="keycap">⌫</code>.
140 /// Labelled <code class="keycap">Delete</code> on Apple keyboards.
141 Backspace,
142 /// <code class="keycap">CapsLock</code> or <code class="keycap">⇪</code>
143 CapsLock,
144 /// The application context menu key, which is typically found between the right <code class="keycap">Meta</code> key and the right <code class="keycap">Control</code> key.
145 ContextMenu,
146 /// <code class="keycap">Control</code> or <code class="keycap">⌃</code>
147 ControlLeft,
148 /// <code class="keycap">Control</code> or <code class="keycap">⌃</code>
149 ControlRight,
150 /// <code class="keycap">Enter</code> or <code class="keycap">↵</code>. Labelled <code class="keycap">Return</code> on Apple keyboards.
151 Enter,
152 /// The Windows, <code class="keycap">⌘</code>, <code class="keycap">Command</code> or other OS symbol key.
153 MetaLeft,
154 /// The Windows, <code class="keycap">⌘</code>, <code class="keycap">Command</code> or other OS symbol key.
155 MetaRight,
156 /// <code class="keycap">Shift</code> or <code class="keycap">⇧</code>
157 ShiftLeft,
158 /// <code class="keycap">Shift</code> or <code class="keycap">⇧</code>
159 ShiftRight,
160 /// <code class="keycap"> </code> (space)
161 Space,
162 /// <code class="keycap">Tab</code> or <code class="keycap">⇥</code>
163 Tab,
164 /// Japanese: <code class="keycap">変換</code> (<span class="unicode">henkan</span>)
165 Convert,
166 /// Japanese: <code class="keycap">カタカナ/ひらがな/ローマ字</code> (<span class="unicode">katakana/hiragana/romaji</span>)
167 KanaMode,
168 /// Korean: HangulMode <code class="keycap">한/영</code> (<span class="unicode">han/yeong</span>)<br>Japanese (Mac keyboard): <code class="keycap">かな</code> (<span class="unicode">kana</span>)
169 Lang1,
170 /// Korean: Hanja <code class="keycap">한자</code> (<span class="unicode">hanja</span>)<br>Japanese (Mac keyboard): <code class="keycap">英数</code> (<span class="unicode">eisu</span>)
171 Lang2,
172 /// Japanese (word-processing keyboard): Katakana
173 Lang3,
174 /// Japanese (word-processing keyboard): Hiragana
175 Lang4,
176 /// Japanese (word-processing keyboard): Zenkaku/Hankaku
177 Lang5,
178 /// Japanese: <code class="keycap">無変換</code> (<span class="unicode">muhenkan</span>)
179 NonConvert,
180 /// <code class="keycap">⌦</code>. The forward delete key.
181 /// Note that on Apple keyboards, the key labelled <code class="keycap">Delete</code> on the main part of
182 /// the keyboard should be encoded as <code class="code">"Backspace"</code>.
183 Delete,
184 /// <code class="keycap">End</code> or <code class="keycap">↘</code>
185 End,
186 /// <code class="keycap">Help</code>. Not present on standard PC keyboards.
187 Help,
188 /// <code class="keycap">Home</code> or <code class="keycap">↖</code>
189 Home,
190 /// <code class="keycap">Insert</code> or <code class="keycap">Ins</code>. Not present on Apple keyboards.
191 Insert,
192 /// <code class="keycap">Page Down</code>, <code class="keycap">PgDn</code> or <code class="keycap">⇟</code>
193 PageDown,
194 /// <code class="keycap">Page Up</code>, <code class="keycap">PgUp</code> or <code class="keycap">⇞</code>
195 PageUp,
196 /// <code class="keycap">↓</code>
197 ArrowDown,
198 /// <code class="keycap">←</code>
199 ArrowLeft,
200 /// <code class="keycap">→</code>
201 ArrowRight,
202 /// <code class="keycap">↑</code>
203 ArrowUp,
204 /// On the Mac, the <code class="code">"NumLock"</code> code should be used for the numpad <code class="keycap">Clear</code> key.
205 NumLock,
206 /// <code class="keycap">0 Ins</code> on a keyboard<br><code class="keycap">0</code> on a phone or remote control
207 Numpad0,
208 /// <code class="keycap">1 End</code> on a keyboard<br><code class="keycap">1</code> or <code class="keycap">1 QZ</code> on a phone or
209 /// remote control
210 Numpad1,
211 /// <code class="keycap">2 ↓</code> on a keyboard<br><code class="keycap">2 ABC</code> on a phone or remote control
212 Numpad2,
213 /// <code class="keycap">3 PgDn</code> on a keyboard<br><code class="keycap">3 DEF</code> on a phone or remote control
214 Numpad3,
215 /// <code class="keycap">4 ←</code> on a keyboard<br><code class="keycap">4 GHI</code> on a phone or remote control
216 Numpad4,
217 /// <code class="keycap">5</code> on a keyboard<br><code class="keycap">5 JKL</code> on a phone or remote control
218 Numpad5,
219 /// <code class="keycap">6 →</code> on a keyboard<br><code class="keycap">6 MNO</code> on a phone or remote control
220 Numpad6,
221 /// <code class="keycap">7 Home</code> on a keyboard<br><code class="keycap">7 PQRS</code> or <code class="keycap">7 PRS</code> on a phone
222 /// or remote control
223 Numpad7,
224 /// <code class="keycap">8 ↑</code> on a keyboard<br><code class="keycap">8 TUV</code> on a phone or remote control
225 Numpad8,
226 /// <code class="keycap">9 PgUp</code> on a keyboard<br><code class="keycap">9 WXYZ</code> or <code class="keycap">9 WXY</code> on a phone
227 /// or remote control
228 Numpad9,
229 /// <code class="keycap">+</code>
230 NumpadAdd,
231 /// Found on the Microsoft Natural Keyboard.
232 NumpadBackspace,
233 /// <code class="keycap">C</code> or <code class="keycap">AC</code> (All Clear). Also for use with numpads that have a <code class="keycap">Clear</code> key that is separate from the <code class="keycap">NumLock</code> key. On the Mac, the numpad <code class="keycap">Clear</code> key should always
234 /// be encoded as <code class="code">"NumLock"</code>.
235 NumpadClear,
236 /// <code class="keycap">CE</code> (Clear Entry)
237 NumpadClearEntry,
238 /// <code class="keycap">,</code> (thousands separator). For locales where the thousands separator
239 /// is a "." (e.g., Brazil), this key may generate a <code class="keycap">.</code>.
240 NumpadComma,
241 /// <code class="keycap">. Del</code>. For locales where the decimal separator is "," (e.g.,
242 /// Brazil), this key may generate a <code class="keycap">,</code>.
243 NumpadDecimal,
244 /// <code class="keycap">/</code>
245 NumpadDivide,
246 NumpadEnter,
247 /// <code class="keycap">=</code>
248 NumpadEqual,
249 /// <code class="keycap">#</code> on a phone or remote control device. This key is typically found
250 /// below the <code class="keycap">9</code> key and to the right of the <code class="keycap">0</code> key.
251 NumpadHash,
252 /// <code class="keycap">M+</code> Add current entry to the value stored in memory.
253 NumpadMemoryAdd,
254 /// <code class="keycap">MC</code> Clear the value stored in memory.
255 NumpadMemoryClear,
256 /// <code class="keycap">MR</code> Replace the current entry with the value stored in memory.
257 NumpadMemoryRecall,
258 /// <code class="keycap">MS</code> Replace the value stored in memory with the current entry.
259 NumpadMemoryStore,
260 /// <code class="keycap">M-</code> Subtract current entry from the value stored in memory.
261 NumpadMemorySubtract,
262 /// <code class="keycap">*</code> on a keyboard. For use with numpads that provide mathematical
263 /// operations (<code class="keycap">+</code>, <code class="keycap">-</code>, <code class="keycap">*</code> and <code class="keycap">/</code>).<br>Use <code class="code">"NumpadStar"</code> for the <code class="keycap">*</code> key on phones and remote controls.
264 NumpadMultiply,
265 /// <code class="keycap">(</code> Found on the Microsoft Natural Keyboard.
266 NumpadParenLeft,
267 /// <code class="keycap">)</code> Found on the Microsoft Natural Keyboard.
268 NumpadParenRight,
269 /// <code class="keycap">*</code> on a phone or remote control device.
270 /// This key is typically found below the <code class="keycap">7</code> key and to the left of
271 /// the <code class="keycap">0</code> key.<br>Use <code class="code">"NumpadMultiply"</code> for the <code class="keycap">*</code> key on
272 /// numeric keypads.
273 NumpadStar,
274 /// <code class="keycap">-</code>
275 NumpadSubtract,
276 /// <code class="keycap">Esc</code> or <code class="keycap">⎋</code>
277 Escape,
278 /// <code class="keycap">Fn</code> This is typically a hardware key that does not generate a separate
279 /// code. Most keyboards do not place this key in the function section, but it is
280 /// included here to keep it with related keys.
281 Fn,
282 /// <code class="keycap">FLock</code> or <code class="keycap">FnLock</code>. Function Lock key. Found on the Microsoft
283 /// Natural Keyboard.
284 FnLock,
285 /// <code class="keycap">PrtScr SysRq</code> or <code class="keycap">Print Screen</code>
286 PrintScreen,
287 /// <code class="keycap">Scroll Lock</code>
288 ScrollLock,
289 /// <code class="keycap">Pause Break</code>
290 Pause,
291 /// Some laptops place this key to the left of the <code class="keycap">↑</code> key.
292 BrowserBack,
293 BrowserFavorites,
294 /// Some laptops place this key to the right of the <code class="keycap">↑</code> key.
295 BrowserForward,
296 BrowserHome,
297 BrowserRefresh,
298 BrowserSearch,
299 BrowserStop,
300 /// <code class="keycap">Eject</code> or <code class="keycap">⏏</code>. This key is placed in the <a data-link-type="dfn" href="#function-section" id="ref-for-function-section①①">function
301 /// section</a> on some Apple keyboards.
302 Eject,
303 /// Sometimes labelled <code class="keycap">My Computer</code> on the keyboard
304 LaunchApp1,
305 /// Sometimes labelled <code class="keycap">Calculator</code> on the keyboard
306 LaunchApp2,
307 LaunchMail,
308 MediaPlayPause,
309 MediaSelect,
310 MediaStop,
311 MediaTrackNext,
312 MediaTrackPrevious,
313 /// This key is placed in the function section on some Apple keyboards,
314 /// replacing the <code class="keycap">Eject</code> key.
315 Power,
316 Sleep,
317 AudioVolumeDown,
318 AudioVolumeMute,
319 AudioVolumeUp,
320 WakeUp,
321 Hyper,
322 Super,
323 Turbo,
324 Abort,
325 Resume,
326 Suspend,
327 /// Found on Sun’s USB keyboard.
328 Again,
329 /// Found on Sun’s USB keyboard.
330 Copy,
331 /// Found on Sun’s USB keyboard.
332 Cut,
333 /// Found on Sun’s USB keyboard.
334 Find,
335 /// Found on Sun’s USB keyboard.
336 Open,
337 /// Found on Sun’s USB keyboard.
338 Paste,
339 /// Found on Sun’s USB keyboard.
340 Props,
341 /// Found on Sun’s USB keyboard.
342 Select,
343 /// Found on Sun’s USB keyboard.
344 Undo,
345 /// Use for dedicated <code class="keycap">ひらがな</code> key found on some Japanese word processing keyboards.
346 Hiragana,
347 /// Use for dedicated <code class="keycap">カタカナ</code> key found on some Japanese word processing keyboards.
348 Katakana,
349 /// This value code should be used when no other
350 /// value given in this specification is appropriate.
351 Unidentified,
352 /// <code class="keycap">F1</code>
353 F1,
354 /// <code class="keycap">F2</code>
355 F2,
356 /// <code class="keycap">F3</code>
357 F3,
358 /// <code class="keycap">F4</code>
359 F4,
360 /// <code class="keycap">F5</code>
361 F5,
362 /// <code class="keycap">F6</code>
363 F6,
364 /// <code class="keycap">F7</code>
365 F7,
366 /// <code class="keycap">F8</code>
367 F8,
368 /// <code class="keycap">F9</code>
369 F9,
370 /// <code class="keycap">F10</code>
371 F10,
372 /// <code class="keycap">F11</code>
373 F11,
374 /// <code class="keycap">F12</code>
375 F12,
376 /// <code class="keycap">F13</code>
377 F13,
378 /// <code class="keycap">F14</code>
379 F14,
380 /// <code class="keycap">F15</code>
381 F15,
382 /// <code class="keycap">F16</code>
383 F16,
384 /// <code class="keycap">F17</code>
385 F17,
386 /// <code class="keycap">F18</code>
387 F18,
388 /// <code class="keycap">F19</code>
389 F19,
390 /// <code class="keycap">F20</code>
391 F20,
392 /// <code class="keycap">F21</code>
393 F21,
394 /// <code class="keycap">F22</code>
395 F22,
396 /// <code class="keycap">F23</code>
397 F23,
398 /// <code class="keycap">F24</code>
399 F24,
400 /// <code class="keycap">F25</code>
401 F25,
402 /// <code class="keycap">F26</code>
403 F26,
404 /// <code class="keycap">F27</code>
405 F27,
406 /// <code class="keycap">F28</code>
407 F28,
408 /// <code class="keycap">F29</code>
409 F29,
410 /// <code class="keycap">F30</code>
411 F30,
412 /// <code class="keycap">F31</code>
413 F31,
414 /// <code class="keycap">F32</code>
415 F32,
416 /// <code class="keycap">F33</code>
417 F33,
418 /// <code class="keycap">F34</code>
419 F34,
420 /// <code class="keycap">F35</code>
421 F35,
422 /// Non-standard code value supported by Chromium.
423 BrightnessDown,
424 /// Non-standard code value supported by Chromium.
425 BrightnessUp,
426 /// Non-standard code value supported by Chromium.
427 DisplayToggleIntExt,
428 /// Non-standard code value supported by Chromium.
429 KeyboardLayoutSelect,
430 /// Non-standard code value supported by Chromium.
431 LaunchAssistant,
432 /// Non-standard code value supported by Chromium.
433 LaunchControlPanel,
434 /// Non-standard code value supported by Chromium.
435 LaunchScreenSaver,
436 /// Non-standard code value supported by Chromium.
437 MailForward,
438 /// Non-standard code value supported by Chromium.
439 MailReply,
440 /// Non-standard code value supported by Chromium.
441 MailSend,
442 /// Non-standard code value supported by Chromium.
443 MediaFastForward,
444 /// Non-standard code value supported by Chromium.
445 MediaPause,
446 /// Non-standard code value supported by Chromium.
447 MediaPlay,
448 /// Non-standard code value supported by Chromium.
449 MediaRecord,
450 /// Non-standard code value supported by Chromium.
451 MediaRewind,
452 /// Non-standard code value supported by Chromium.
453 MicrophoneMuteToggle,
454 /// Non-standard code value supported by Chromium.
455 PrivacyScreenToggle,
456 /// Non-standard code value supported by Chromium.
457 SelectTask,
458 /// Non-standard code value supported by Chromium.
459 ShowAllWindows,
460 /// Non-standard code value supported by Chromium.
461 ZoomToggle,
462}
463
464
465impl Display for Code {
466 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
467 use self::Code::*;
468 match *self {
469
470 Backquote => f.write_str("Backquote"),
471 Backslash => f.write_str("Backslash"),
472 BracketLeft => f.write_str("BracketLeft"),
473 BracketRight => f.write_str("BracketRight"),
474 Comma => f.write_str("Comma"),
475 Digit0 => f.write_str("Digit0"),
476 Digit1 => f.write_str("Digit1"),
477 Digit2 => f.write_str("Digit2"),
478 Digit3 => f.write_str("Digit3"),
479 Digit4 => f.write_str("Digit4"),
480 Digit5 => f.write_str("Digit5"),
481 Digit6 => f.write_str("Digit6"),
482 Digit7 => f.write_str("Digit7"),
483 Digit8 => f.write_str("Digit8"),
484 Digit9 => f.write_str("Digit9"),
485 Equal => f.write_str("Equal"),
486 IntlBackslash => f.write_str("IntlBackslash"),
487 IntlRo => f.write_str("IntlRo"),
488 IntlYen => f.write_str("IntlYen"),
489 KeyA => f.write_str("KeyA"),
490 KeyB => f.write_str("KeyB"),
491 KeyC => f.write_str("KeyC"),
492 KeyD => f.write_str("KeyD"),
493 KeyE => f.write_str("KeyE"),
494 KeyF => f.write_str("KeyF"),
495 KeyG => f.write_str("KeyG"),
496 KeyH => f.write_str("KeyH"),
497 KeyI => f.write_str("KeyI"),
498 KeyJ => f.write_str("KeyJ"),
499 KeyK => f.write_str("KeyK"),
500 KeyL => f.write_str("KeyL"),
501 KeyM => f.write_str("KeyM"),
502 KeyN => f.write_str("KeyN"),
503 KeyO => f.write_str("KeyO"),
504 KeyP => f.write_str("KeyP"),
505 KeyQ => f.write_str("KeyQ"),
506 KeyR => f.write_str("KeyR"),
507 KeyS => f.write_str("KeyS"),
508 KeyT => f.write_str("KeyT"),
509 KeyU => f.write_str("KeyU"),
510 KeyV => f.write_str("KeyV"),
511 KeyW => f.write_str("KeyW"),
512 KeyX => f.write_str("KeyX"),
513 KeyY => f.write_str("KeyY"),
514 KeyZ => f.write_str("KeyZ"),
515 Minus => f.write_str("Minus"),
516 Period => f.write_str("Period"),
517 Quote => f.write_str("Quote"),
518 Semicolon => f.write_str("Semicolon"),
519 Slash => f.write_str("Slash"),
520 AltLeft => f.write_str("AltLeft"),
521 AltRight => f.write_str("AltRight"),
522 Backspace => f.write_str("Backspace"),
523 CapsLock => f.write_str("CapsLock"),
524 ContextMenu => f.write_str("ContextMenu"),
525 ControlLeft => f.write_str("ControlLeft"),
526 ControlRight => f.write_str("ControlRight"),
527 Enter => f.write_str("Enter"),
528 MetaLeft => f.write_str("MetaLeft"),
529 MetaRight => f.write_str("MetaRight"),
530 ShiftLeft => f.write_str("ShiftLeft"),
531 ShiftRight => f.write_str("ShiftRight"),
532 Space => f.write_str("Space"),
533 Tab => f.write_str("Tab"),
534 Convert => f.write_str("Convert"),
535 KanaMode => f.write_str("KanaMode"),
536 Lang1 => f.write_str("Lang1"),
537 Lang2 => f.write_str("Lang2"),
538 Lang3 => f.write_str("Lang3"),
539 Lang4 => f.write_str("Lang4"),
540 Lang5 => f.write_str("Lang5"),
541 NonConvert => f.write_str("NonConvert"),
542 Delete => f.write_str("Delete"),
543 End => f.write_str("End"),
544 Help => f.write_str("Help"),
545 Home => f.write_str("Home"),
546 Insert => f.write_str("Insert"),
547 PageDown => f.write_str("PageDown"),
548 PageUp => f.write_str("PageUp"),
549 ArrowDown => f.write_str("ArrowDown"),
550 ArrowLeft => f.write_str("ArrowLeft"),
551 ArrowRight => f.write_str("ArrowRight"),
552 ArrowUp => f.write_str("ArrowUp"),
553 NumLock => f.write_str("NumLock"),
554 Numpad0 => f.write_str("Numpad0"),
555 Numpad1 => f.write_str("Numpad1"),
556 Numpad2 => f.write_str("Numpad2"),
557 Numpad3 => f.write_str("Numpad3"),
558 Numpad4 => f.write_str("Numpad4"),
559 Numpad5 => f.write_str("Numpad5"),
560 Numpad6 => f.write_str("Numpad6"),
561 Numpad7 => f.write_str("Numpad7"),
562 Numpad8 => f.write_str("Numpad8"),
563 Numpad9 => f.write_str("Numpad9"),
564 NumpadAdd => f.write_str("NumpadAdd"),
565 NumpadBackspace => f.write_str("NumpadBackspace"),
566 NumpadClear => f.write_str("NumpadClear"),
567 NumpadClearEntry => f.write_str("NumpadClearEntry"),
568 NumpadComma => f.write_str("NumpadComma"),
569 NumpadDecimal => f.write_str("NumpadDecimal"),
570 NumpadDivide => f.write_str("NumpadDivide"),
571 NumpadEnter => f.write_str("NumpadEnter"),
572 NumpadEqual => f.write_str("NumpadEqual"),
573 NumpadHash => f.write_str("NumpadHash"),
574 NumpadMemoryAdd => f.write_str("NumpadMemoryAdd"),
575 NumpadMemoryClear => f.write_str("NumpadMemoryClear"),
576 NumpadMemoryRecall => f.write_str("NumpadMemoryRecall"),
577 NumpadMemoryStore => f.write_str("NumpadMemoryStore"),
578 NumpadMemorySubtract => f.write_str("NumpadMemorySubtract"),
579 NumpadMultiply => f.write_str("NumpadMultiply"),
580 NumpadParenLeft => f.write_str("NumpadParenLeft"),
581 NumpadParenRight => f.write_str("NumpadParenRight"),
582 NumpadStar => f.write_str("NumpadStar"),
583 NumpadSubtract => f.write_str("NumpadSubtract"),
584 Escape => f.write_str("Escape"),
585 Fn => f.write_str("Fn"),
586 FnLock => f.write_str("FnLock"),
587 PrintScreen => f.write_str("PrintScreen"),
588 ScrollLock => f.write_str("ScrollLock"),
589 Pause => f.write_str("Pause"),
590 BrowserBack => f.write_str("BrowserBack"),
591 BrowserFavorites => f.write_str("BrowserFavorites"),
592 BrowserForward => f.write_str("BrowserForward"),
593 BrowserHome => f.write_str("BrowserHome"),
594 BrowserRefresh => f.write_str("BrowserRefresh"),
595 BrowserSearch => f.write_str("BrowserSearch"),
596 BrowserStop => f.write_str("BrowserStop"),
597 Eject => f.write_str("Eject"),
598 LaunchApp1 => f.write_str("LaunchApp1"),
599 LaunchApp2 => f.write_str("LaunchApp2"),
600 LaunchMail => f.write_str("LaunchMail"),
601 MediaPlayPause => f.write_str("MediaPlayPause"),
602 MediaSelect => f.write_str("MediaSelect"),
603 MediaStop => f.write_str("MediaStop"),
604 MediaTrackNext => f.write_str("MediaTrackNext"),
605 MediaTrackPrevious => f.write_str("MediaTrackPrevious"),
606 Power => f.write_str("Power"),
607 Sleep => f.write_str("Sleep"),
608 AudioVolumeDown => f.write_str("AudioVolumeDown"),
609 AudioVolumeMute => f.write_str("AudioVolumeMute"),
610 AudioVolumeUp => f.write_str("AudioVolumeUp"),
611 WakeUp => f.write_str("WakeUp"),
612 Hyper => f.write_str("Hyper"),
613 Super => f.write_str("Super"),
614 Turbo => f.write_str("Turbo"),
615 Abort => f.write_str("Abort"),
616 Resume => f.write_str("Resume"),
617 Suspend => f.write_str("Suspend"),
618 Again => f.write_str("Again"),
619 Copy => f.write_str("Copy"),
620 Cut => f.write_str("Cut"),
621 Find => f.write_str("Find"),
622 Open => f.write_str("Open"),
623 Paste => f.write_str("Paste"),
624 Props => f.write_str("Props"),
625 Select => f.write_str("Select"),
626 Undo => f.write_str("Undo"),
627 Hiragana => f.write_str("Hiragana"),
628 Katakana => f.write_str("Katakana"),
629 Unidentified => f.write_str("Unidentified"),
630 F1 => f.write_str("F1"),
631 F2 => f.write_str("F2"),
632 F3 => f.write_str("F3"),
633 F4 => f.write_str("F4"),
634 F5 => f.write_str("F5"),
635 F6 => f.write_str("F6"),
636 F7 => f.write_str("F7"),
637 F8 => f.write_str("F8"),
638 F9 => f.write_str("F9"),
639 F10 => f.write_str("F10"),
640 F11 => f.write_str("F11"),
641 F12 => f.write_str("F12"),
642 F13 => f.write_str("F13"),
643 F14 => f.write_str("F14"),
644 F15 => f.write_str("F15"),
645 F16 => f.write_str("F16"),
646 F17 => f.write_str("F17"),
647 F18 => f.write_str("F18"),
648 F19 => f.write_str("F19"),
649 F20 => f.write_str("F20"),
650 F21 => f.write_str("F21"),
651 F22 => f.write_str("F22"),
652 F23 => f.write_str("F23"),
653 F24 => f.write_str("F24"),
654 F25 => f.write_str("F25"),
655 F26 => f.write_str("F26"),
656 F27 => f.write_str("F27"),
657 F28 => f.write_str("F28"),
658 F29 => f.write_str("F29"),
659 F30 => f.write_str("F30"),
660 F31 => f.write_str("F31"),
661 F32 => f.write_str("F32"),
662 F33 => f.write_str("F33"),
663 F34 => f.write_str("F34"),
664 F35 => f.write_str("F35"),
665 BrightnessDown => f.write_str("BrightnessDown"),
666 BrightnessUp => f.write_str("BrightnessUp"),
667 DisplayToggleIntExt => f.write_str("DisplayToggleIntExt"),
668 KeyboardLayoutSelect => f.write_str("KeyboardLayoutSelect"),
669 LaunchAssistant => f.write_str("LaunchAssistant"),
670 LaunchControlPanel => f.write_str("LaunchControlPanel"),
671 LaunchScreenSaver => f.write_str("LaunchScreenSaver"),
672 MailForward => f.write_str("MailForward"),
673 MailReply => f.write_str("MailReply"),
674 MailSend => f.write_str("MailSend"),
675 MediaFastForward => f.write_str("MediaFastForward"),
676 MediaPause => f.write_str("MediaPause"),
677 MediaPlay => f.write_str("MediaPlay"),
678 MediaRecord => f.write_str("MediaRecord"),
679 MediaRewind => f.write_str("MediaRewind"),
680 MicrophoneMuteToggle => f.write_str("MicrophoneMuteToggle"),
681 PrivacyScreenToggle => f.write_str("PrivacyScreenToggle"),
682 SelectTask => f.write_str("SelectTask"),
683 ShowAllWindows => f.write_str("ShowAllWindows"),
684 ZoomToggle => f.write_str("ZoomToggle"),
685
686 }
687 }
688}
689
690impl FromStr for Code {
691 type Err = UnrecognizedCodeError;
692
693 fn from_str(s: &str) -> Result<Self, Self::Err> {
694 use crate::Code::*;
695 match s {
696 "Backquote" => Ok(Backquote),
697 "Backslash" => Ok(Backslash),
698 "BracketLeft" => Ok(BracketLeft),
699 "BracketRight" => Ok(BracketRight),
700 "Comma" => Ok(Comma),
701 "Digit0" => Ok(Digit0),
702 "Digit1" => Ok(Digit1),
703 "Digit2" => Ok(Digit2),
704 "Digit3" => Ok(Digit3),
705 "Digit4" => Ok(Digit4),
706 "Digit5" => Ok(Digit5),
707 "Digit6" => Ok(Digit6),
708 "Digit7" => Ok(Digit7),
709 "Digit8" => Ok(Digit8),
710 "Digit9" => Ok(Digit9),
711 "Equal" => Ok(Equal),
712 "IntlBackslash" => Ok(IntlBackslash),
713 "IntlRo" => Ok(IntlRo),
714 "IntlYen" => Ok(IntlYen),
715 "KeyA" => Ok(KeyA),
716 "KeyB" => Ok(KeyB),
717 "KeyC" => Ok(KeyC),
718 "KeyD" => Ok(KeyD),
719 "KeyE" => Ok(KeyE),
720 "KeyF" => Ok(KeyF),
721 "KeyG" => Ok(KeyG),
722 "KeyH" => Ok(KeyH),
723 "KeyI" => Ok(KeyI),
724 "KeyJ" => Ok(KeyJ),
725 "KeyK" => Ok(KeyK),
726 "KeyL" => Ok(KeyL),
727 "KeyM" => Ok(KeyM),
728 "KeyN" => Ok(KeyN),
729 "KeyO" => Ok(KeyO),
730 "KeyP" => Ok(KeyP),
731 "KeyQ" => Ok(KeyQ),
732 "KeyR" => Ok(KeyR),
733 "KeyS" => Ok(KeyS),
734 "KeyT" => Ok(KeyT),
735 "KeyU" => Ok(KeyU),
736 "KeyV" => Ok(KeyV),
737 "KeyW" => Ok(KeyW),
738 "KeyX" => Ok(KeyX),
739 "KeyY" => Ok(KeyY),
740 "KeyZ" => Ok(KeyZ),
741 "Minus" => Ok(Minus),
742 "Period" => Ok(Period),
743 "Quote" => Ok(Quote),
744 "Semicolon" => Ok(Semicolon),
745 "Slash" => Ok(Slash),
746 "AltLeft" => Ok(AltLeft),
747 "AltRight" => Ok(AltRight),
748 "Backspace" => Ok(Backspace),
749 "CapsLock" => Ok(CapsLock),
750 "ContextMenu" => Ok(ContextMenu),
751 "ControlLeft" => Ok(ControlLeft),
752 "ControlRight" => Ok(ControlRight),
753 "Enter" => Ok(Enter),
754 "MetaLeft" | "OSLeft" => Ok(MetaLeft),
755 "MetaRight" | "OSRight" => Ok(MetaRight),
756 "ShiftLeft" => Ok(ShiftLeft),
757 "ShiftRight" => Ok(ShiftRight),
758 "Space" => Ok(Space),
759 "Tab" => Ok(Tab),
760 "Convert" => Ok(Convert),
761 "KanaMode" => Ok(KanaMode),
762 "Lang1" => Ok(Lang1),
763 "Lang2" => Ok(Lang2),
764 "Lang3" => Ok(Lang3),
765 "Lang4" => Ok(Lang4),
766 "Lang5" => Ok(Lang5),
767 "NonConvert" => Ok(NonConvert),
768 "Delete" => Ok(Delete),
769 "End" => Ok(End),
770 "Help" => Ok(Help),
771 "Home" => Ok(Home),
772 "Insert" => Ok(Insert),
773 "PageDown" => Ok(PageDown),
774 "PageUp" => Ok(PageUp),
775 "ArrowDown" => Ok(ArrowDown),
776 "ArrowLeft" => Ok(ArrowLeft),
777 "ArrowRight" => Ok(ArrowRight),
778 "ArrowUp" => Ok(ArrowUp),
779 "NumLock" => Ok(NumLock),
780 "Numpad0" => Ok(Numpad0),
781 "Numpad1" => Ok(Numpad1),
782 "Numpad2" => Ok(Numpad2),
783 "Numpad3" => Ok(Numpad3),
784 "Numpad4" => Ok(Numpad4),
785 "Numpad5" => Ok(Numpad5),
786 "Numpad6" => Ok(Numpad6),
787 "Numpad7" => Ok(Numpad7),
788 "Numpad8" => Ok(Numpad8),
789 "Numpad9" => Ok(Numpad9),
790 "NumpadAdd" => Ok(NumpadAdd),
791 "NumpadBackspace" => Ok(NumpadBackspace),
792 "NumpadClear" => Ok(NumpadClear),
793 "NumpadClearEntry" => Ok(NumpadClearEntry),
794 "NumpadComma" => Ok(NumpadComma),
795 "NumpadDecimal" => Ok(NumpadDecimal),
796 "NumpadDivide" => Ok(NumpadDivide),
797 "NumpadEnter" => Ok(NumpadEnter),
798 "NumpadEqual" => Ok(NumpadEqual),
799 "NumpadHash" => Ok(NumpadHash),
800 "NumpadMemoryAdd" => Ok(NumpadMemoryAdd),
801 "NumpadMemoryClear" => Ok(NumpadMemoryClear),
802 "NumpadMemoryRecall" => Ok(NumpadMemoryRecall),
803 "NumpadMemoryStore" => Ok(NumpadMemoryStore),
804 "NumpadMemorySubtract" => Ok(NumpadMemorySubtract),
805 "NumpadMultiply" => Ok(NumpadMultiply),
806 "NumpadParenLeft" => Ok(NumpadParenLeft),
807 "NumpadParenRight" => Ok(NumpadParenRight),
808 "NumpadStar" => Ok(NumpadStar),
809 "NumpadSubtract" => Ok(NumpadSubtract),
810 "Escape" => Ok(Escape),
811 "Fn" => Ok(Fn),
812 "FnLock" => Ok(FnLock),
813 "PrintScreen" => Ok(PrintScreen),
814 "ScrollLock" => Ok(ScrollLock),
815 "Pause" => Ok(Pause),
816 "BrowserBack" => Ok(BrowserBack),
817 "BrowserFavorites" => Ok(BrowserFavorites),
818 "BrowserForward" => Ok(BrowserForward),
819 "BrowserHome" => Ok(BrowserHome),
820 "BrowserRefresh" => Ok(BrowserRefresh),
821 "BrowserSearch" => Ok(BrowserSearch),
822 "BrowserStop" => Ok(BrowserStop),
823 "Eject" => Ok(Eject),
824 "LaunchApp1" => Ok(LaunchApp1),
825 "LaunchApp2" => Ok(LaunchApp2),
826 "LaunchMail" => Ok(LaunchMail),
827 "MediaPlayPause" => Ok(MediaPlayPause),
828 "MediaSelect" | "LaunchMediaPlayer" => Ok(MediaSelect),
829 "MediaStop" => Ok(MediaStop),
830 "MediaTrackNext" => Ok(MediaTrackNext),
831 "MediaTrackPrevious" => Ok(MediaTrackPrevious),
832 "Power" => Ok(Power),
833 "Sleep" => Ok(Sleep),
834 "AudioVolumeDown" | "VolumeDown" => Ok(AudioVolumeDown),
835 "AudioVolumeMute" | "VolumeMute" => Ok(AudioVolumeMute),
836 "AudioVolumeUp" | "VolumeUp" => Ok(AudioVolumeUp),
837 "WakeUp" => Ok(WakeUp),
838 "Hyper" => Ok(Hyper),
839 "Super" => Ok(Super),
840 "Turbo" => Ok(Turbo),
841 "Abort" => Ok(Abort),
842 "Resume" => Ok(Resume),
843 "Suspend" => Ok(Suspend),
844 "Again" => Ok(Again),
845 "Copy" => Ok(Copy),
846 "Cut" => Ok(Cut),
847 "Find" => Ok(Find),
848 "Open" => Ok(Open),
849 "Paste" => Ok(Paste),
850 "Props" => Ok(Props),
851 "Select" => Ok(Select),
852 "Undo" => Ok(Undo),
853 "Hiragana" => Ok(Hiragana),
854 "Katakana" => Ok(Katakana),
855 "Unidentified" => Ok(Unidentified),
856 "F1" => Ok(F1),
857 "F2" => Ok(F2),
858 "F3" => Ok(F3),
859 "F4" => Ok(F4),
860 "F5" => Ok(F5),
861 "F6" => Ok(F6),
862 "F7" => Ok(F7),
863 "F8" => Ok(F8),
864 "F9" => Ok(F9),
865 "F10" => Ok(F10),
866 "F11" => Ok(F11),
867 "F12" => Ok(F12),
868 "F13" => Ok(F13),
869 "F14" => Ok(F14),
870 "F15" => Ok(F15),
871 "F16" => Ok(F16),
872 "F17" => Ok(F17),
873 "F18" => Ok(F18),
874 "F19" => Ok(F19),
875 "F20" => Ok(F20),
876 "F21" => Ok(F21),
877 "F22" => Ok(F22),
878 "F23" => Ok(F23),
879 "F24" => Ok(F24),
880 "F25" => Ok(F25),
881 "F26" => Ok(F26),
882 "F27" => Ok(F27),
883 "F28" => Ok(F28),
884 "F29" => Ok(F29),
885 "F30" => Ok(F30),
886 "F31" => Ok(F31),
887 "F32" => Ok(F32),
888 "F33" => Ok(F33),
889 "F34" => Ok(F34),
890 "F35" => Ok(F35),
891 "BrightnessDown" => Ok(BrightnessDown),
892 "BrightnessUp" => Ok(BrightnessUp),
893 "DisplayToggleIntExt" => Ok(DisplayToggleIntExt),
894 "KeyboardLayoutSelect" => Ok(KeyboardLayoutSelect),
895 "LaunchAssistant" => Ok(LaunchAssistant),
896 "LaunchControlPanel" => Ok(LaunchControlPanel),
897 "LaunchScreenSaver" => Ok(LaunchScreenSaver),
898 "MailForward" => Ok(MailForward),
899 "MailReply" => Ok(MailReply),
900 "MailSend" => Ok(MailSend),
901 "MediaFastForward" => Ok(MediaFastForward),
902 "MediaPause" => Ok(MediaPause),
903 "MediaPlay" => Ok(MediaPlay),
904 "MediaRecord" => Ok(MediaRecord),
905 "MediaRewind" => Ok(MediaRewind),
906 "MicrophoneMuteToggle" => Ok(MicrophoneMuteToggle),
907 "PrivacyScreenToggle" => Ok(PrivacyScreenToggle),
908 "SelectTask" => Ok(SelectTask),
909 "ShowAllWindows" => Ok(ShowAllWindows),
910 "ZoomToggle" => Ok(ZoomToggle),
911
912 _ => Err(UnrecognizedCodeError),
913 }
914 }
915}
916
917/// Parse from string error, returned when string does not match to any Code variant.
918#[derive(Clone, Debug)]
919pub struct UnrecognizedCodeError;
920
921impl fmt::Display for UnrecognizedCodeError {
922 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
923 write!(f, "Unrecognized code")
924 }
925}
926
927impl Error for UnrecognizedCodeError {}
928