smart_keymap/key/
callback.rs1#![doc = include_str!("doc_de_callback.md")]
2
3use serde::Deserialize;
4
5use crate::key;
6
7use crate::keymap::KeymapCallback;
8
9#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
11pub struct Key {
12 pub keymap_callback: KeymapCallback,
14}
15
16impl Key {
17 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}