1#[repr(u8)]
10#[allow(missing_docs)] #[rustfmt::skip]
11#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
12pub enum KeyAlpha {
13 A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z,
14 Num0, Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9,
15}
16
17#[repr(u8)]
19#[non_exhaustive]
20#[allow(missing_docs)] #[rustfmt::skip]
21#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
22pub enum KeyPad {
23 Num0, Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8, Num9,
24 Multiply, Add, Subtract, Divide, Decimal,
25 Enter, Equal,
26}
27
28#[rustfmt::skip]
31#[cfg(feature = "js")]
32#[cfg_attr(nightly_doc, doc(cfg(feature = "js")))]
33impl KeyAlpha {
34 pub const fn from_js_code(code: &str) -> Option<Self> {
38 use KeyAlpha as K;
39 match code.as_bytes() {
40 b"KeyA" => Some(K::A), b"KeyB" => Some(K::B), b"KeyC" => Some(K::C),
41 b"KeyD" => Some(K::D), b"KeyE" => Some(K::E), b"KeyF" => Some(K::F),
42 b"KeyG" => Some(K::G), b"KeyH" => Some(K::H), b"KeyI" => Some(K::I),
43 b"KeyJ" => Some(K::J), b"KeyK" => Some(K::K), b"KeyL" => Some(K::L),
44 b"KeyM" => Some(K::M), b"KeyN" => Some(K::N), b"KeyO" => Some(K::O),
45 b"KeyP" => Some(K::P), b"KeyQ" => Some(K::Q), b"KeyR" => Some(K::R),
46 b"KeyS" => Some(K::S), b"KeyT" => Some(K::T), b"KeyU" => Some(K::U),
47 b"KeyV" => Some(K::V), b"KeyW" => Some(K::W), b"KeyX" => Some(K::X),
48 b"KeyY" => Some(K::Y), b"KeyZ" => Some(K::Z),
49 b"Digit0" => Some(K::Num0), b"Digit1" => Some(K::Num1), b"Digit2" => Some(K::Num2),
50 b"Digit3" => Some(K::Num3), b"Digit4" => Some(K::Num4), b"Digit5" => Some(K::Num5),
51 b"Digit6" => Some(K::Num6), b"Digit7" => Some(K::Num7), b"Digit8" => Some(K::Num8),
52 b"Digit9" => Some(K::Num9),
53 _ => None,
54 }
55 }
56 pub const fn to_js_code(self) -> &'static str {
60 use KeyAlpha as K;
61 match self {
62 K::A => "KeyA", K::B => "KeyB", K::C => "KeyC", K::D => "KeyD", K::E => "KeyE",
63 K::F => "KeyF", K::G => "KeyG", K::H => "KeyH", K::I => "KeyI", K::J => "KeyJ",
64 K::K => "KeyK", K::L => "KeyL", K::M => "KeyM", K::N => "KeyN", K::O => "KeyO",
65 K::P => "KeyP", K::Q => "KeyQ", K::R => "KeyR", K::S => "KeyS", K::T => "KeyT",
66 K::U => "KeyU", K::V => "KeyV", K::W => "KeyW", K::X => "KeyX", K::Y => "KeyY",
67 K::Z => "KeyZ",
68 K::Num0 => "Digit0", K::Num1 => "Digit1", K::Num2 => "Digit2", K::Num3 => "Digit3",
69 K::Num4 => "Digit4", K::Num5 => "Digit5", K::Num6 => "Digit6", K::Num7 => "Digit7",
70 K::Num8 => "Digit8", K::Num9 => "Digit9",
71 }
72 }
73
74 pub const fn from_js_key(key: &str) -> Option<Self> {
78 use KeyAlpha as K;
79 match key.as_bytes() {
80 b"A" => Some(K::A), b"B" => Some(K::B), b"C" => Some(K::C),
81 b"D" => Some(K::D), b"E" => Some(K::E), b"F" => Some(K::F),
82 b"G" => Some(K::G), b"H" => Some(K::H), b"I" => Some(K::I),
83 b"J" => Some(K::J), b"K" => Some(K::K), b"L" => Some(K::L),
84 b"M" => Some(K::M), b"N" => Some(K::N), b"O" => Some(K::O),
85 b"P" => Some(K::P), b"Q" => Some(K::Q), b"R" => Some(K::R),
86 b"S" => Some(K::S), b"T" => Some(K::T), b"U" => Some(K::U),
87 b"V" => Some(K::V), b"W" => Some(K::W), b"X" => Some(K::X),
88 b"Y" => Some(K::Y), b"Z" => Some(K::Z),
89 b"0" => Some(K::Num0), b"1" => Some(K::Num1), b"2" => Some(K::Num2),
90 b"3" => Some(K::Num3), b"4" => Some(K::Num4), b"5" => Some(K::Num5),
91 b"6" => Some(K::Num6), b"7" => Some(K::Num7), b"8" => Some(K::Num8),
92 b"9" => Some(K::Num9),
93 _ => None,
94 }
95 }
96 pub const fn to_js_key(self) -> &'static str {
100 use KeyAlpha as K;
101 match self {
102 K::A => "A", K::B => "B", K::C => "C", K::D => "D", K::E => "E", K::F => "F",
103 K::G => "G", K::H => "H", K::I => "I", K::J => "J", K::K => "K", K::L => "L",
104 K::M => "M", K::N => "N", K::O => "O", K::P => "P", K::Q => "Q", K::R => "R",
105 K::S => "S", K::T => "T", K::U => "U", K::V => "V", K::W => "W", K::X => "X",
106 K::Y => "Y", K::Z => "Z",
107 K::Num0 => "0", K::Num1 => "1", K::Num2 => "2", K::Num3 => "3", K::Num4 => "4",
108 K::Num5 => "5", K::Num6 => "6", K::Num7 => "7", K::Num8 => "8", K::Num9 => "9",
109 }
110 }
111}
112#[rustfmt::skip]
113#[cfg(feature = "js")]
114#[cfg_attr(nightly_doc, doc(cfg(feature = "js")))]
115impl KeyPad {
116 pub const fn from_js_code(code: &str) -> Option<Self> {
120 use KeyPad as K;
121 match code.as_bytes() {
122 b"Numpad0" => Some(K::Num0), b"Numpad1" => Some(K::Num1), b"Numpad2" => Some(K::Num2),
123 b"Numpad3" => Some(K::Num3), b"Numpad4" => Some(K::Num4), b"Numpad5" => Some(K::Num5),
124 b"Numpad6" => Some(K::Num6), b"Numpad7" => Some(K::Num7), b"Numpad8" => Some(K::Num8),
125 b"Numpad9" => Some(K::Num9), b"NumpadMultiply" => Some(K::Multiply),
126 b"NumpadAdd" => Some(K::Add), b"NumpadSubtract" => Some(K::Subtract),
127 b"NumpadDivide" => Some(K::Divide), b"NumpadDecimal" => Some(K::Decimal),
128 b"NumpadEnter" => Some(K::Enter), b"NumpadEqual" => Some(K::Equal),
129 _ => None,
130 }
131 }
132 pub const fn to_js_code(self) -> &'static str {
136 use KeyPad as K;
137 match self {
138 K::Num0 => "Numpad0", K::Num1 => "Numpad1", K::Num2 => "Numpad2",
139 K::Num3 => "Numpad3", K::Num4 => "Numpad4", K::Num5 => "Numpad5",
140 K::Num6 => "Numpad6", K::Num7 => "Numpad7", K::Num8 => "Numpad8",
141 K::Num9 => "Numpad9", K::Multiply => "NumpadMultiply", K::Add => "NumpadAdd",
142 K::Subtract => "NumpadSubtract", K::Divide => "NumpadDivide",
143 K::Decimal => "NumpadDecimal", K::Enter => "NumpadEnter", K::Equal => "NumpadEqual",
144 }
145 }
146
147 pub const fn from_js_key(key: &str) -> Option<Self> {
151 use KeyPad as K;
152 match key.as_bytes() {
153 b"0" => Some(K::Num0), b"1" => Some(K::Num1), b"2" => Some(K::Num2),
154 b"3" => Some(K::Num3), b"4" => Some(K::Num4), b"5" => Some(K::Num5),
155 b"6" => Some(K::Num6), b"7" => Some(K::Num7), b"8" => Some(K::Num8),
156 b"9" => Some(K::Num9), b"*" => Some(K::Multiply), b"+" => Some(K::Add),
157 b"-" => Some(K::Subtract), b"/" => Some(K::Divide), b"." => Some(K::Decimal),
158 b"Enter" => Some(K::Enter), b"=" => Some(K::Equal),
159 _ => None,
160 }
161 }
162 pub const fn to_js_key(self) -> &'static str {
166 use KeyPad as K;
167 match self {
168 K::Num0 => "0", K::Num1 => "1", K::Num2 => "2", K::Num3 => "3", K::Num4 => "4",
169 K::Num5 => "5", K::Num6 => "6", K::Num7 => "7", K::Num8 => "8", K::Num9 => "9",
170 K::Multiply => "*", K::Add => "+", K::Subtract => "-", K::Divide => "/",
171 K::Decimal => ".", K::Enter => "Enter", K::Equal => "=",
172 }
173 }
174}