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">,&lt;</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&amp;</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