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}