smart_keymap_core/key/
custom.rs1use core::fmt::Debug;
2use core::marker::PhantomData;
3
4use serde::Deserialize;
5
6use crate::key;
7
8#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
10pub struct Ref(pub u8);
11
12#[derive(Debug, Clone, Copy, PartialEq)]
14pub struct Context;
15
16impl Context {
17 pub fn reset(&mut self) {}
19}
20
21#[derive(Debug, Clone, Copy, PartialEq)]
23pub struct Event;
24
25#[derive(Debug, Clone, Copy, PartialEq)]
27pub struct PendingKeyState;
28
29#[derive(Debug, Clone, Copy, PartialEq)]
31pub struct KeyState;
32
33#[derive(Debug, Clone, Copy, PartialEq)]
35pub struct System<R>(PhantomData<R>);
36
37impl<R> System<R> {
38 pub const fn new() -> Self {
40 Self(PhantomData)
41 }
42}
43
44impl<R> Default for System<R> {
45 fn default() -> Self {
46 Self::new()
47 }
48}
49
50impl<R: Debug> key::System<R> for System<R> {
51 type Ref = Ref;
52 type Context = Context;
53 type Event = Event;
54 type PendingKeyState = PendingKeyState;
55 type KeyState = KeyState;
56
57 fn new_pressed_key(
58 &self,
59 _keymap_index: u16,
60 _context: &Self::Context,
61 _key_ref: Ref,
62 ) -> (
63 key::PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>,
64 key::KeyEvents<Self::Event>,
65 ) {
66 let pkr = key::PressedKeyResult::Resolved(KeyState);
67 let pke = key::KeyEvents::no_events();
68 (pkr, pke)
69 }
70
71 fn update_pending_state(
72 &self,
73 _pending_state: &mut Self::PendingKeyState,
74 _keymap_index: u16,
75 _context: &Self::Context,
76 _key_ref: Ref,
77 _event: key::Event<Self::Event>,
78 ) -> (Option<key::NewPressedKey<R>>, key::KeyEvents<Self::Event>) {
79 panic!()
80 }
81
82 fn update_state(
83 &self,
84 _key_state: &mut Self::KeyState,
85 _ref: &Self::Ref,
86 _context: &Self::Context,
87 _keymap_index: u16,
88 _event: key::Event<Self::Event>,
89 ) -> key::KeyEvents<Self::Event> {
90 panic!()
91 }
92
93 fn key_output(
94 &self,
95 Ref(custom_code): &Self::Ref,
96 _key_state: &Self::KeyState,
97 ) -> Option<key::KeyOutput> {
98 Some(key::KeyOutput::from_custom_code(*custom_code))
99 }
100}
101
102#[cfg(test)]
103mod tests {
104 use super::*;
105
106 #[test]
107 fn test_sizeof_ref() {
108 assert_eq!(1, core::mem::size_of::<Ref>());
109 }
110
111 #[test]
112 fn test_sizeof_event() {
113 assert_eq!(0, core::mem::size_of::<Event>());
114 }
115}