Skip to main content

muxr_core/protocol/
keyboard_input.rs

1use serde::Serialize;
2
3/// Normalized key code carried with the original terminal bytes.
4#[derive(rkyv::Archive, Clone, Copy, Debug, rkyv::Deserialize, Eq, PartialEq, Serialize, rkyv::Serialize)]
5pub enum ClientKeyCode {
6    Backspace,
7    Char(char),
8    Down,
9    Enter,
10    Esc,
11    Left,
12    Right,
13    Tab,
14    Unknown,
15    Up,
16}
17
18/// Keyboard modifiers observed by the muxr client.
19#[derive(rkyv::Archive, Clone, Copy, Debug, Default, rkyv::Deserialize, Eq, PartialEq, Serialize, rkyv::Serialize)]
20pub struct ClientKeyModifiers {
21    pub alt: bool,
22    pub ctrl: bool,
23    pub shift: bool,
24}
25
26impl ClientKeyModifiers {
27    pub const ALT: Self = Self {
28        alt: true,
29        ctrl: false,
30        shift: false,
31    };
32    pub const CTRL_ALT: Self = Self {
33        alt: true,
34        ctrl: true,
35        shift: false,
36    };
37    pub const NONE: Self = Self {
38        alt: false,
39        ctrl: false,
40        shift: false,
41    };
42    pub const SHIFT: Self = Self {
43        alt: false,
44        ctrl: false,
45        shift: true,
46    };
47    pub const SHIFT_ALT: Self = Self {
48        alt: true,
49        ctrl: false,
50        shift: true,
51    };
52}
53
54/// One ordered keyboard event from the muxr client.
55#[derive(rkyv::Archive, Clone, Debug, rkyv::Deserialize, Eq, PartialEq, Serialize, rkyv::Serialize)]
56pub struct ClientKey {
57    pub code: ClientKeyCode,
58    pub modifiers: ClientKeyModifiers,
59    pub raw_bytes: Vec<u8>,
60}