cog_task/resource/
key.rs

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);