1
2#![cfg_attr(rustfmt, rustfmt_skip)]
4#![allow(clippy::doc_markdown)]
5#![allow(deprecated)]
6
7use core::fmt::{self, Display};
8use core::str::FromStr;
9#[cfg(not(feature = "std"))]
10use core::error::Error;
11#[cfg(feature = "std")]
12use std::error::Error;
13
14#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, PartialOrd, Ord)]
23#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
24#[non_exhaustive]
25pub enum Code {
26 #[doc(alias = "Backtick")]
29 #[doc(alias = "Grave")]
30 Backquote,
31 Backslash,
36 BracketLeft,
38 BracketRight,
40 Comma,
42 Digit0,
44 Digit1,
46 Digit2,
48 Digit3,
50 Digit4,
52 Digit5,
54 Digit6,
56 Digit7,
58 Digit8,
60 Digit9,
62 Equal,
64 IntlBackslash,
67 IntlRo,
70 IntlYen,
74 KeyA,
77 KeyB,
79 KeyC,
81 KeyD,
83 KeyE,
85 KeyF,
87 KeyG,
89 KeyH,
91 KeyI,
93 KeyJ,
95 KeyK,
97 KeyL,
99 KeyM,
101 KeyN,
103 KeyO,
105 KeyP,
107 KeyQ,
110 KeyR,
112 KeyS,
114 KeyT,
116 KeyU,
118 KeyV,
120 KeyW,
123 KeyX,
125 KeyY,
128 KeyZ,
132 Minus,
134 Period,
136 #[doc(alias = "Apostrophe")]
139 Quote,
140 Semicolon,
142 Slash,
144 AltLeft,
146 AltRight,
149 Backspace,
152 CapsLock,
154 ContextMenu,
156 ControlLeft,
158 ControlRight,
160 #[doc(alias = "Return")]
162 Enter,
163 #[doc(alias = "SuperLeft")]
166 #[doc(alias = "OSLeft")]
167 MetaLeft,
168 #[doc(alias = "SuperRight")]
171 #[doc(alias = "OSRight")]
172 MetaRight,
173 ShiftLeft,
175 ShiftRight,
177 Space,
179 Tab,
181 Convert,
183 KanaMode,
185 Lang1,
187 Lang2,
189 Lang3,
191 Lang4,
193 Lang5,
195 NonConvert,
197 Delete,
201 End,
203 Help,
205 Home,
207 Insert,
209 PageDown,
211 PageUp,
213 ArrowDown,
215 ArrowLeft,
217 ArrowRight,
219 ArrowUp,
221 NumLock,
223 Numpad0,
225 Numpad1,
228 Numpad2,
230 Numpad3,
232 Numpad4,
234 Numpad5,
236 Numpad6,
238 Numpad7,
241 Numpad8,
243 Numpad9,
246 NumpadAdd,
248 NumpadBackspace,
250 NumpadClear,
253 NumpadClearEntry,
255 NumpadComma,
258 NumpadDecimal,
261 NumpadDivide,
263 NumpadEnter,
264 NumpadEqual,
266 NumpadHash,
269 NumpadMemoryAdd,
271 NumpadMemoryClear,
273 NumpadMemoryRecall,
275 NumpadMemoryStore,
277 NumpadMemorySubtract,
279 NumpadMultiply,
282 NumpadParenLeft,
284 NumpadParenRight,
286 NumpadStar,
291 NumpadSubtract,
293 Escape,
295 Fn,
299 FnLock,
302 PrintScreen,
304 ScrollLock,
306 Pause,
308 BrowserBack,
310 BrowserFavorites,
311 BrowserForward,
313 BrowserHome,
314 BrowserRefresh,
315 BrowserSearch,
316 BrowserStop,
317 Eject,
320 LaunchApp1,
322 LaunchApp2,
324 LaunchMail,
325 MediaPlayPause,
326 #[doc(alias = "LaunchMediaPlayer")]
327 MediaSelect,
328 MediaStop,
329 MediaTrackNext,
330 MediaTrackPrevious,
331 Power,
334 Sleep,
335 #[doc(alias = "VolumeDown")]
336 AudioVolumeDown,
337 #[doc(alias = "VolumeMute")]
338 AudioVolumeMute,
339 #[doc(alias = "VolumeUp")]
340 AudioVolumeUp,
341 WakeUp,
342 #[deprecated = "marked as legacy in the spec, use Meta instead"]
343 Hyper,
344 #[deprecated = "marked as legacy in the spec, use Meta instead"]
345 Super,
346 #[deprecated = "marked as legacy in the spec, use Meta instead"]
347 Turbo,
348 Abort,
349 Resume,
350 Suspend,
351 Again,
353 Copy,
355 Cut,
357 Find,
359 Open,
361 Paste,
363 Props,
365 Select,
367 Undo,
369 Hiragana,
371 Katakana,
373 Unidentified,
376 F1,
378 F2,
380 F3,
382 F4,
384 F5,
386 F6,
388 F7,
390 F8,
392 F9,
394 F10,
396 F11,
398 F12,
400 F13,
402 F14,
404 F15,
406 F16,
408 F17,
410 F18,
412 F19,
414 F20,
416 F21,
418 F22,
420 F23,
422 F24,
424 F25,
426 F26,
428 F27,
430 F28,
432 F29,
434 F30,
436 F31,
438 F32,
440 F33,
442 F34,
444 F35,
446 BrightnessDown,
448 BrightnessUp,
450 DisplayToggleIntExt,
452 KeyboardLayoutSelect,
454 LaunchAssistant,
456 LaunchControlPanel,
458 LaunchScreenSaver,
460 MailForward,
462 MailReply,
464 MailSend,
466 MediaFastForward,
468 MediaPause,
470 MediaPlay,
472 MediaRecord,
474 MediaRewind,
476 MicrophoneMuteToggle,
478 PrivacyScreenToggle,
480 KeyboardBacklightToggle,
482 SelectTask,
484 ShowAllWindows,
486 ZoomToggle,
488}
489
490
491impl Display for Code {
492 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
493 use self::Code::*;
494 match *self {
495 Backquote => f.write_str("Backquote"),
496 Backslash => f.write_str("Backslash"),
497 BracketLeft => f.write_str("BracketLeft"),
498 BracketRight => f.write_str("BracketRight"),
499 Comma => f.write_str("Comma"),
500 Digit0 => f.write_str("Digit0"),
501 Digit1 => f.write_str("Digit1"),
502 Digit2 => f.write_str("Digit2"),
503 Digit3 => f.write_str("Digit3"),
504 Digit4 => f.write_str("Digit4"),
505 Digit5 => f.write_str("Digit5"),
506 Digit6 => f.write_str("Digit6"),
507 Digit7 => f.write_str("Digit7"),
508 Digit8 => f.write_str("Digit8"),
509 Digit9 => f.write_str("Digit9"),
510 Equal => f.write_str("Equal"),
511 IntlBackslash => f.write_str("IntlBackslash"),
512 IntlRo => f.write_str("IntlRo"),
513 IntlYen => f.write_str("IntlYen"),
514 KeyA => f.write_str("KeyA"),
515 KeyB => f.write_str("KeyB"),
516 KeyC => f.write_str("KeyC"),
517 KeyD => f.write_str("KeyD"),
518 KeyE => f.write_str("KeyE"),
519 KeyF => f.write_str("KeyF"),
520 KeyG => f.write_str("KeyG"),
521 KeyH => f.write_str("KeyH"),
522 KeyI => f.write_str("KeyI"),
523 KeyJ => f.write_str("KeyJ"),
524 KeyK => f.write_str("KeyK"),
525 KeyL => f.write_str("KeyL"),
526 KeyM => f.write_str("KeyM"),
527 KeyN => f.write_str("KeyN"),
528 KeyO => f.write_str("KeyO"),
529 KeyP => f.write_str("KeyP"),
530 KeyQ => f.write_str("KeyQ"),
531 KeyR => f.write_str("KeyR"),
532 KeyS => f.write_str("KeyS"),
533 KeyT => f.write_str("KeyT"),
534 KeyU => f.write_str("KeyU"),
535 KeyV => f.write_str("KeyV"),
536 KeyW => f.write_str("KeyW"),
537 KeyX => f.write_str("KeyX"),
538 KeyY => f.write_str("KeyY"),
539 KeyZ => f.write_str("KeyZ"),
540 Minus => f.write_str("Minus"),
541 Period => f.write_str("Period"),
542 Quote => f.write_str("Quote"),
543 Semicolon => f.write_str("Semicolon"),
544 Slash => f.write_str("Slash"),
545 AltLeft => f.write_str("AltLeft"),
546 AltRight => f.write_str("AltRight"),
547 Backspace => f.write_str("Backspace"),
548 CapsLock => f.write_str("CapsLock"),
549 ContextMenu => f.write_str("ContextMenu"),
550 ControlLeft => f.write_str("ControlLeft"),
551 ControlRight => f.write_str("ControlRight"),
552 Enter => f.write_str("Enter"),
553 MetaLeft => f.write_str("MetaLeft"),
554 MetaRight => f.write_str("MetaRight"),
555 ShiftLeft => f.write_str("ShiftLeft"),
556 ShiftRight => f.write_str("ShiftRight"),
557 Space => f.write_str("Space"),
558 Tab => f.write_str("Tab"),
559 Convert => f.write_str("Convert"),
560 KanaMode => f.write_str("KanaMode"),
561 Lang1 => f.write_str("Lang1"),
562 Lang2 => f.write_str("Lang2"),
563 Lang3 => f.write_str("Lang3"),
564 Lang4 => f.write_str("Lang4"),
565 Lang5 => f.write_str("Lang5"),
566 NonConvert => f.write_str("NonConvert"),
567 Delete => f.write_str("Delete"),
568 End => f.write_str("End"),
569 Help => f.write_str("Help"),
570 Home => f.write_str("Home"),
571 Insert => f.write_str("Insert"),
572 PageDown => f.write_str("PageDown"),
573 PageUp => f.write_str("PageUp"),
574 ArrowDown => f.write_str("ArrowDown"),
575 ArrowLeft => f.write_str("ArrowLeft"),
576 ArrowRight => f.write_str("ArrowRight"),
577 ArrowUp => f.write_str("ArrowUp"),
578 NumLock => f.write_str("NumLock"),
579 Numpad0 => f.write_str("Numpad0"),
580 Numpad1 => f.write_str("Numpad1"),
581 Numpad2 => f.write_str("Numpad2"),
582 Numpad3 => f.write_str("Numpad3"),
583 Numpad4 => f.write_str("Numpad4"),
584 Numpad5 => f.write_str("Numpad5"),
585 Numpad6 => f.write_str("Numpad6"),
586 Numpad7 => f.write_str("Numpad7"),
587 Numpad8 => f.write_str("Numpad8"),
588 Numpad9 => f.write_str("Numpad9"),
589 NumpadAdd => f.write_str("NumpadAdd"),
590 NumpadBackspace => f.write_str("NumpadBackspace"),
591 NumpadClear => f.write_str("NumpadClear"),
592 NumpadClearEntry => f.write_str("NumpadClearEntry"),
593 NumpadComma => f.write_str("NumpadComma"),
594 NumpadDecimal => f.write_str("NumpadDecimal"),
595 NumpadDivide => f.write_str("NumpadDivide"),
596 NumpadEnter => f.write_str("NumpadEnter"),
597 NumpadEqual => f.write_str("NumpadEqual"),
598 NumpadHash => f.write_str("NumpadHash"),
599 NumpadMemoryAdd => f.write_str("NumpadMemoryAdd"),
600 NumpadMemoryClear => f.write_str("NumpadMemoryClear"),
601 NumpadMemoryRecall => f.write_str("NumpadMemoryRecall"),
602 NumpadMemoryStore => f.write_str("NumpadMemoryStore"),
603 NumpadMemorySubtract => f.write_str("NumpadMemorySubtract"),
604 NumpadMultiply => f.write_str("NumpadMultiply"),
605 NumpadParenLeft => f.write_str("NumpadParenLeft"),
606 NumpadParenRight => f.write_str("NumpadParenRight"),
607 NumpadStar => f.write_str("NumpadStar"),
608 NumpadSubtract => f.write_str("NumpadSubtract"),
609 Escape => f.write_str("Escape"),
610 Fn => f.write_str("Fn"),
611 FnLock => f.write_str("FnLock"),
612 PrintScreen => f.write_str("PrintScreen"),
613 ScrollLock => f.write_str("ScrollLock"),
614 Pause => f.write_str("Pause"),
615 BrowserBack => f.write_str("BrowserBack"),
616 BrowserFavorites => f.write_str("BrowserFavorites"),
617 BrowserForward => f.write_str("BrowserForward"),
618 BrowserHome => f.write_str("BrowserHome"),
619 BrowserRefresh => f.write_str("BrowserRefresh"),
620 BrowserSearch => f.write_str("BrowserSearch"),
621 BrowserStop => f.write_str("BrowserStop"),
622 Eject => f.write_str("Eject"),
623 LaunchApp1 => f.write_str("LaunchApp1"),
624 LaunchApp2 => f.write_str("LaunchApp2"),
625 LaunchMail => f.write_str("LaunchMail"),
626 MediaPlayPause => f.write_str("MediaPlayPause"),
627 MediaSelect => f.write_str("MediaSelect"),
628 MediaStop => f.write_str("MediaStop"),
629 MediaTrackNext => f.write_str("MediaTrackNext"),
630 MediaTrackPrevious => f.write_str("MediaTrackPrevious"),
631 Power => f.write_str("Power"),
632 Sleep => f.write_str("Sleep"),
633 AudioVolumeDown => f.write_str("AudioVolumeDown"),
634 AudioVolumeMute => f.write_str("AudioVolumeMute"),
635 AudioVolumeUp => f.write_str("AudioVolumeUp"),
636 WakeUp => f.write_str("WakeUp"),
637 Hyper => f.write_str("Hyper"),
638 Super => f.write_str("Super"),
639 Turbo => f.write_str("Turbo"),
640 Abort => f.write_str("Abort"),
641 Resume => f.write_str("Resume"),
642 Suspend => f.write_str("Suspend"),
643 Again => f.write_str("Again"),
644 Copy => f.write_str("Copy"),
645 Cut => f.write_str("Cut"),
646 Find => f.write_str("Find"),
647 Open => f.write_str("Open"),
648 Paste => f.write_str("Paste"),
649 Props => f.write_str("Props"),
650 Select => f.write_str("Select"),
651 Undo => f.write_str("Undo"),
652 Hiragana => f.write_str("Hiragana"),
653 Katakana => f.write_str("Katakana"),
654 Unidentified => f.write_str("Unidentified"),
655 F1 => f.write_str("F1"),
656 F2 => f.write_str("F2"),
657 F3 => f.write_str("F3"),
658 F4 => f.write_str("F4"),
659 F5 => f.write_str("F5"),
660 F6 => f.write_str("F6"),
661 F7 => f.write_str("F7"),
662 F8 => f.write_str("F8"),
663 F9 => f.write_str("F9"),
664 F10 => f.write_str("F10"),
665 F11 => f.write_str("F11"),
666 F12 => f.write_str("F12"),
667 F13 => f.write_str("F13"),
668 F14 => f.write_str("F14"),
669 F15 => f.write_str("F15"),
670 F16 => f.write_str("F16"),
671 F17 => f.write_str("F17"),
672 F18 => f.write_str("F18"),
673 F19 => f.write_str("F19"),
674 F20 => f.write_str("F20"),
675 F21 => f.write_str("F21"),
676 F22 => f.write_str("F22"),
677 F23 => f.write_str("F23"),
678 F24 => f.write_str("F24"),
679 F25 => f.write_str("F25"),
680 F26 => f.write_str("F26"),
681 F27 => f.write_str("F27"),
682 F28 => f.write_str("F28"),
683 F29 => f.write_str("F29"),
684 F30 => f.write_str("F30"),
685 F31 => f.write_str("F31"),
686 F32 => f.write_str("F32"),
687 F33 => f.write_str("F33"),
688 F34 => f.write_str("F34"),
689 F35 => f.write_str("F35"),
690 BrightnessDown => f.write_str("BrightnessDown"),
691 BrightnessUp => f.write_str("BrightnessUp"),
692 DisplayToggleIntExt => f.write_str("DisplayToggleIntExt"),
693 KeyboardLayoutSelect => f.write_str("KeyboardLayoutSelect"),
694 LaunchAssistant => f.write_str("LaunchAssistant"),
695 LaunchControlPanel => f.write_str("LaunchControlPanel"),
696 LaunchScreenSaver => f.write_str("LaunchScreenSaver"),
697 MailForward => f.write_str("MailForward"),
698 MailReply => f.write_str("MailReply"),
699 MailSend => f.write_str("MailSend"),
700 MediaFastForward => f.write_str("MediaFastForward"),
701 MediaPause => f.write_str("MediaPause"),
702 MediaPlay => f.write_str("MediaPlay"),
703 MediaRecord => f.write_str("MediaRecord"),
704 MediaRewind => f.write_str("MediaRewind"),
705 MicrophoneMuteToggle => f.write_str("MicrophoneMuteToggle"),
706 PrivacyScreenToggle => f.write_str("PrivacyScreenToggle"),
707 KeyboardBacklightToggle => f.write_str("KeyboardBacklightToggle"),
708 SelectTask => f.write_str("SelectTask"),
709 ShowAllWindows => f.write_str("ShowAllWindows"),
710 ZoomToggle => f.write_str("ZoomToggle"),
711
712 }
713 }
714}
715
716impl FromStr for Code {
717 type Err = UnrecognizedCodeError;
718
719 fn from_str(s: &str) -> Result<Self, Self::Err> {
720 use crate::Code::*;
721 match s {
722 "Backquote" => Ok(Backquote),
723 "Backslash" => Ok(Backslash),
724 "BracketLeft" => Ok(BracketLeft),
725 "BracketRight" => Ok(BracketRight),
726 "Comma" => Ok(Comma),
727 "Digit0" => Ok(Digit0),
728 "Digit1" => Ok(Digit1),
729 "Digit2" => Ok(Digit2),
730 "Digit3" => Ok(Digit3),
731 "Digit4" => Ok(Digit4),
732 "Digit5" => Ok(Digit5),
733 "Digit6" => Ok(Digit6),
734 "Digit7" => Ok(Digit7),
735 "Digit8" => Ok(Digit8),
736 "Digit9" => Ok(Digit9),
737 "Equal" => Ok(Equal),
738 "IntlBackslash" => Ok(IntlBackslash),
739 "IntlRo" => Ok(IntlRo),
740 "IntlYen" => Ok(IntlYen),
741 "KeyA" => Ok(KeyA),
742 "KeyB" => Ok(KeyB),
743 "KeyC" => Ok(KeyC),
744 "KeyD" => Ok(KeyD),
745 "KeyE" => Ok(KeyE),
746 "KeyF" => Ok(KeyF),
747 "KeyG" => Ok(KeyG),
748 "KeyH" => Ok(KeyH),
749 "KeyI" => Ok(KeyI),
750 "KeyJ" => Ok(KeyJ),
751 "KeyK" => Ok(KeyK),
752 "KeyL" => Ok(KeyL),
753 "KeyM" => Ok(KeyM),
754 "KeyN" => Ok(KeyN),
755 "KeyO" => Ok(KeyO),
756 "KeyP" => Ok(KeyP),
757 "KeyQ" => Ok(KeyQ),
758 "KeyR" => Ok(KeyR),
759 "KeyS" => Ok(KeyS),
760 "KeyT" => Ok(KeyT),
761 "KeyU" => Ok(KeyU),
762 "KeyV" => Ok(KeyV),
763 "KeyW" => Ok(KeyW),
764 "KeyX" => Ok(KeyX),
765 "KeyY" => Ok(KeyY),
766 "KeyZ" => Ok(KeyZ),
767 "Minus" => Ok(Minus),
768 "Period" => Ok(Period),
769 "Quote" => Ok(Quote),
770 "Semicolon" => Ok(Semicolon),
771 "Slash" => Ok(Slash),
772 "AltLeft" => Ok(AltLeft),
773 "AltRight" => Ok(AltRight),
774 "Backspace" => Ok(Backspace),
775 "CapsLock" => Ok(CapsLock),
776 "ContextMenu" => Ok(ContextMenu),
777 "ControlLeft" => Ok(ControlLeft),
778 "ControlRight" => Ok(ControlRight),
779 "Enter" => Ok(Enter),
780 "MetaLeft" | "OSLeft" => Ok(MetaLeft),
781 "MetaRight" | "OSRight" => Ok(MetaRight),
782 "ShiftLeft" => Ok(ShiftLeft),
783 "ShiftRight" => Ok(ShiftRight),
784 "Space" => Ok(Space),
785 "Tab" => Ok(Tab),
786 "Convert" => Ok(Convert),
787 "KanaMode" => Ok(KanaMode),
788 "Lang1" => Ok(Lang1),
789 "Lang2" => Ok(Lang2),
790 "Lang3" => Ok(Lang3),
791 "Lang4" => Ok(Lang4),
792 "Lang5" => Ok(Lang5),
793 "NonConvert" => Ok(NonConvert),
794 "Delete" => Ok(Delete),
795 "End" => Ok(End),
796 "Help" => Ok(Help),
797 "Home" => Ok(Home),
798 "Insert" => Ok(Insert),
799 "PageDown" => Ok(PageDown),
800 "PageUp" => Ok(PageUp),
801 "ArrowDown" => Ok(ArrowDown),
802 "ArrowLeft" => Ok(ArrowLeft),
803 "ArrowRight" => Ok(ArrowRight),
804 "ArrowUp" => Ok(ArrowUp),
805 "NumLock" => Ok(NumLock),
806 "Numpad0" => Ok(Numpad0),
807 "Numpad1" => Ok(Numpad1),
808 "Numpad2" => Ok(Numpad2),
809 "Numpad3" => Ok(Numpad3),
810 "Numpad4" => Ok(Numpad4),
811 "Numpad5" => Ok(Numpad5),
812 "Numpad6" => Ok(Numpad6),
813 "Numpad7" => Ok(Numpad7),
814 "Numpad8" => Ok(Numpad8),
815 "Numpad9" => Ok(Numpad9),
816 "NumpadAdd" => Ok(NumpadAdd),
817 "NumpadBackspace" => Ok(NumpadBackspace),
818 "NumpadClear" => Ok(NumpadClear),
819 "NumpadClearEntry" => Ok(NumpadClearEntry),
820 "NumpadComma" => Ok(NumpadComma),
821 "NumpadDecimal" => Ok(NumpadDecimal),
822 "NumpadDivide" => Ok(NumpadDivide),
823 "NumpadEnter" => Ok(NumpadEnter),
824 "NumpadEqual" => Ok(NumpadEqual),
825 "NumpadHash" => Ok(NumpadHash),
826 "NumpadMemoryAdd" => Ok(NumpadMemoryAdd),
827 "NumpadMemoryClear" => Ok(NumpadMemoryClear),
828 "NumpadMemoryRecall" => Ok(NumpadMemoryRecall),
829 "NumpadMemoryStore" => Ok(NumpadMemoryStore),
830 "NumpadMemorySubtract" => Ok(NumpadMemorySubtract),
831 "NumpadMultiply" => Ok(NumpadMultiply),
832 "NumpadParenLeft" => Ok(NumpadParenLeft),
833 "NumpadParenRight" => Ok(NumpadParenRight),
834 "NumpadStar" => Ok(NumpadStar),
835 "NumpadSubtract" => Ok(NumpadSubtract),
836 "Escape" => Ok(Escape),
837 "Fn" => Ok(Fn),
838 "FnLock" => Ok(FnLock),
839 "PrintScreen" => Ok(PrintScreen),
840 "ScrollLock" => Ok(ScrollLock),
841 "Pause" => Ok(Pause),
842 "BrowserBack" => Ok(BrowserBack),
843 "BrowserFavorites" => Ok(BrowserFavorites),
844 "BrowserForward" => Ok(BrowserForward),
845 "BrowserHome" => Ok(BrowserHome),
846 "BrowserRefresh" => Ok(BrowserRefresh),
847 "BrowserSearch" => Ok(BrowserSearch),
848 "BrowserStop" => Ok(BrowserStop),
849 "Eject" => Ok(Eject),
850 "LaunchApp1" => Ok(LaunchApp1),
851 "LaunchApp2" => Ok(LaunchApp2),
852 "LaunchMail" => Ok(LaunchMail),
853 "MediaPlayPause" => Ok(MediaPlayPause),
854 "MediaSelect" | "LaunchMediaPlayer" => Ok(MediaSelect),
855 "MediaStop" => Ok(MediaStop),
856 "MediaTrackNext" => Ok(MediaTrackNext),
857 "MediaTrackPrevious" => Ok(MediaTrackPrevious),
858 "Power" => Ok(Power),
859 "Sleep" => Ok(Sleep),
860 "AudioVolumeDown" | "VolumeDown" => Ok(AudioVolumeDown),
861 "AudioVolumeMute" | "VolumeMute" => Ok(AudioVolumeMute),
862 "AudioVolumeUp" | "VolumeUp" => Ok(AudioVolumeUp),
863 "WakeUp" => Ok(WakeUp),
864 "Hyper" => Ok(Hyper),
865 "Super" => Ok(Super),
866 "Turbo" => Ok(Turbo),
867 "Abort" => Ok(Abort),
868 "Resume" => Ok(Resume),
869 "Suspend" => Ok(Suspend),
870 "Again" => Ok(Again),
871 "Copy" => Ok(Copy),
872 "Cut" => Ok(Cut),
873 "Find" => Ok(Find),
874 "Open" => Ok(Open),
875 "Paste" => Ok(Paste),
876 "Props" => Ok(Props),
877 "Select" => Ok(Select),
878 "Undo" => Ok(Undo),
879 "Hiragana" => Ok(Hiragana),
880 "Katakana" => Ok(Katakana),
881 "Unidentified" => Ok(Unidentified),
882 "F1" => Ok(F1),
883 "F2" => Ok(F2),
884 "F3" => Ok(F3),
885 "F4" => Ok(F4),
886 "F5" => Ok(F5),
887 "F6" => Ok(F6),
888 "F7" => Ok(F7),
889 "F8" => Ok(F8),
890 "F9" => Ok(F9),
891 "F10" => Ok(F10),
892 "F11" => Ok(F11),
893 "F12" => Ok(F12),
894 "F13" => Ok(F13),
895 "F14" => Ok(F14),
896 "F15" => Ok(F15),
897 "F16" => Ok(F16),
898 "F17" => Ok(F17),
899 "F18" => Ok(F18),
900 "F19" => Ok(F19),
901 "F20" => Ok(F20),
902 "F21" => Ok(F21),
903 "F22" => Ok(F22),
904 "F23" => Ok(F23),
905 "F24" => Ok(F24),
906 "F25" => Ok(F25),
907 "F26" => Ok(F26),
908 "F27" => Ok(F27),
909 "F28" => Ok(F28),
910 "F29" => Ok(F29),
911 "F30" => Ok(F30),
912 "F31" => Ok(F31),
913 "F32" => Ok(F32),
914 "F33" => Ok(F33),
915 "F34" => Ok(F34),
916 "F35" => Ok(F35),
917 "BrightnessDown" => Ok(BrightnessDown),
918 "BrightnessUp" => Ok(BrightnessUp),
919 "DisplayToggleIntExt" => Ok(DisplayToggleIntExt),
920 "KeyboardLayoutSelect" => Ok(KeyboardLayoutSelect),
921 "LaunchAssistant" => Ok(LaunchAssistant),
922 "LaunchControlPanel" => Ok(LaunchControlPanel),
923 "LaunchScreenSaver" => Ok(LaunchScreenSaver),
924 "MailForward" => Ok(MailForward),
925 "MailReply" => Ok(MailReply),
926 "MailSend" => Ok(MailSend),
927 "MediaFastForward" => Ok(MediaFastForward),
928 "MediaPause" => Ok(MediaPause),
929 "MediaPlay" => Ok(MediaPlay),
930 "MediaRecord" => Ok(MediaRecord),
931 "MediaRewind" => Ok(MediaRewind),
932 "MicrophoneMuteToggle" => Ok(MicrophoneMuteToggle),
933 "PrivacyScreenToggle" => Ok(PrivacyScreenToggle),
934 "KeyboardBacklightToggle" => Ok(KeyboardBacklightToggle),
935 "SelectTask" => Ok(SelectTask),
936 "ShowAllWindows" => Ok(ShowAllWindows),
937 "ZoomToggle" => Ok(ZoomToggle),
938
939 _ => Err(UnrecognizedCodeError),
940 }
941 }
942}
943
944#[derive(Clone, Debug)]
946pub struct UnrecognizedCodeError;
947
948impl fmt::Display for UnrecognizedCodeError {
949 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
950 write!(f, "Unrecognized code")
951 }
952}
953
954impl Error for UnrecognizedCodeError {}