1use eframe::egui;
2use serde::{Deserialize, Serialize};
3
4macro_rules! key {
5 ($($name:ident),* $(,)?) => {
6 #[derive(Debug, Clone, Copy, Deserialize, Serialize, PartialEq, Eq, Hash, PartialOrd, Ord)]
7 #[serde(rename_all = "snake_case")]
8 pub enum Key {
9 $($name,)*
10 }
11
12 impl From<&Key> for egui::Key {
13 #[inline]
14 fn from(k: &Key) -> Self {
15 match k {
16 $(
17 Key::$name => egui::Key::$name,
18 )*
19 }
20 }
21 }
22
23 impl From<Key> for egui::Key {
24 #[inline(always)]
25 fn from(k: Key) -> Self {
26 Self::from(&k)
27 }
28 }
29
30 impl From<&egui::Key> for Key {
31 #[inline]
32 fn from(k: &egui::Key) -> Self {
33 match k {
34 $(
35 egui::Key::$name => Key::$name,
36 )*
37 }
38 }
39 }
40
41 impl From<egui::Key> for Key {
42 #[inline(always)]
43 fn from(k: egui::Key) -> Self {
44 Self::from(&k)
45 }
46 }
47 }
48}
49
50key!(
51 ArrowDown, ArrowLeft, ArrowRight, ArrowUp, Escape, Tab, Backspace, Enter, Space, Insert,
52 Delete, Home, End, PageUp, PageDown, Num0, Num1, Num2, Num3, Num4, Num5, Num6, Num7, Num8,
53 Num9, 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, F1, F2, F3,
54 F4, F5, F6, F7, F8, F9, F10, F11, F12, F13, F14, F15, F16, F17, F18, F19, F20,
55);