smart_keymap/key/
custom.rs1use serde::Deserialize;
2
3use crate::key;
4
5#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
7pub struct Key {
8 custom: u8,
9}
10
11impl Key {
12 pub const fn new(i: u8) -> Self {
14 Key { custom: i }
15 }
16
17 pub fn new_pressed_key(&self) -> KeyState {
19 KeyState(*self)
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 k_ks = self.new_pressed_key();
38 let pks = key::PressedKeyResult::Resolved(k_ks.into());
39 let pke = key::KeyEvents::no_events();
40 (pks, pke)
41 }
42
43 fn handle_event(
44 &self,
45 _pending_state: &mut Self::PendingKeyState,
46 _context: &Self::Context,
47 _key_path: key::KeyPath,
48 _event: key::Event<Self::Event>,
49 ) -> (Option<key::NewPressedKey>, key::KeyEvents<Self::Event>) {
50 panic!()
51 }
52
53 fn lookup(
54 &self,
55 _path: &[u16],
56 ) -> &dyn key::Key<
57 Context = Self::Context,
58 Event = Self::Event,
59 PendingKeyState = Self::PendingKeyState,
60 KeyState = Self::KeyState,
61 > {
62 self
63 }
64}
65
66#[derive(Debug, Clone, Copy, PartialEq)]
68pub struct KeyState(Key);
69
70impl KeyState {
71 pub fn key_output(&self) -> key::KeyOutput {
73 let KeyState(key) = self;
74 key::KeyOutput::from_custom_code(key.custom)
75 }
76}