smart_keymap/
input.rs

1use serde::{Deserialize, Serialize};
2
3use crate::key;
4
5/// Input events for [crate::keymap::Keymap].
6#[derive(Debug, Deserialize, Serialize, Clone, Copy, PartialEq, Eq)]
7pub enum Event {
8    /// A physical key press for a given `keymap_index`.
9    Press {
10        /// The index of the key in the keymap.
11        keymap_index: u16,
12    },
13    /// A physical key release for a given `keymap_index`.
14    Release {
15        /// The index of the key in the keymap.
16        keymap_index: u16,
17    },
18    /// A virtual key press for a given `key_code`.
19    VirtualKeyPress {
20        /// The virtual key code.
21        key_output: key::KeyOutput,
22    },
23    /// A virtual key release for a given `key_code`.
24    VirtualKeyRelease {
25        /// The virtual key code.
26        key_output: key::KeyOutput,
27    },
28}
29
30/// A struct for associating a key ref with a [crate::key::KeyState].
31#[derive(Debug, Clone, Copy, PartialEq)]
32pub struct PressedKey<R, S> {
33    /// The index of the pressed key in some keymap.
34    pub keymap_index: u16,
35    /// The Ref to the key data of the key state.
36    pub key_ref: R,
37    /// The pressed key state.
38    pub key_state: S,
39}
40
41/// State resulting from [Event].
42#[derive(Debug, Clone, Copy)]
43pub enum PressedInput<KR, KS> {
44    /// Physically pressed key.
45    Key(PressedKey<KR, KS>),
46    /// Virtually pressed key, and its keycode.
47    Virtual(key::KeyOutput),
48}
49
50impl<KR, KS> PressedInput<KR, KS> {
51    /// Constructor for a [PressedInput::Key].
52    pub fn pressed_key(keymap_index: u16, key_ref: KR, key_state: KS) -> Self {
53        Self::Key(PressedKey {
54            keymap_index,
55            key_ref,
56            key_state,
57        })
58    }
59}