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