smart_keymap/key/
callback.rs

1#![doc = include_str!("doc_de_callback.md")]
2
3use serde::Deserialize;
4
5use crate::key;
6
7use crate::keymap::KeymapCallback;
8
9/// A key for HID Keyboard usage codes.
10#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
11pub struct Key {
12    /// The keymap callback
13    pub keymap_callback: KeymapCallback,
14}
15
16impl Key {
17    /// Constructs a key with the given key_code.
18    pub const fn new(keymap_callback: KeymapCallback) -> Self {
19        Key { keymap_callback }
20    }
21}
22
23impl key::Key for Key {
24    type Context = crate::init::Context;
25    type Event = crate::init::Event;
26    type PendingKeyState = crate::init::PendingKeyState;
27    type KeyState = crate::init::KeyState;
28
29    fn new_pressed_key(
30        &self,
31        _context: &Self::Context,
32        _key_path: key::KeyPath,
33    ) -> (
34        key::PressedKeyResult<Self::PendingKeyState, Self::KeyState>,
35        key::KeyEvents<Self::Event>,
36    ) {
37        let &Key { keymap_callback } = self;
38        let pks = key::PressedKeyResult::Resolved(key::NoOpKeyState::new().into());
39        let km_ev = crate::keymap::KeymapEvent::Callback(keymap_callback);
40        let pke = key::KeyEvents::event(key::Event::Keymap(km_ev));
41        (pks, pke)
42    }
43
44    fn handle_event(
45        &self,
46        _pending_state: &mut Self::PendingKeyState,
47        _context: &Self::Context,
48        _key_path: key::KeyPath,
49        _event: key::Event<Self::Event>,
50    ) -> (
51        Option<key::PressedKeyResult<Self::PendingKeyState, Self::KeyState>>,
52        key::KeyEvents<Self::Event>,
53    ) {
54        panic!()
55    }
56
57    fn lookup(
58        &self,
59        _path: &[u16],
60    ) -> &dyn key::Key<
61        Context = Self::Context,
62        Event = Self::Event,
63        PendingKeyState = Self::PendingKeyState,
64        KeyState = Self::KeyState,
65    > {
66        self
67    }
68}