smart_keymap/key/
consumer.rs1use core::fmt::Debug;
2
3use serde::Deserialize;
4
5use crate::key;
6
7#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
9pub enum Ref {
10 UsageCode(u8),
12}
13
14#[derive(Debug, Clone, Copy, PartialEq)]
16pub struct Context;
17
18#[derive(Debug, Clone, Copy, PartialEq)]
20pub struct Event;
21
22#[derive(Debug, Clone, Copy, PartialEq)]
24pub struct PendingKeyState;
25
26#[derive(Debug, Clone, Copy, PartialEq)]
28pub struct KeyState;
29
30#[derive(Debug, Clone, Copy, PartialEq)]
32pub struct System<R: Debug> {
33 _marker: core::marker::PhantomData<R>,
34}
35
36impl<R: Debug> System<R> {
37 pub const fn new() -> Self {
39 Self {
40 _marker: core::marker::PhantomData,
41 }
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 (
62 key::PressedKeyResult::Resolved(KeyState),
63 key::KeyEvents::no_events(),
64 )
65 }
66
67 fn update_pending_state(
68 &self,
69 _pending_state: &mut Self::PendingKeyState,
70 _keymap_index: u16,
71 _context: &Self::Context,
72 _key_ref: Ref,
73 _event: key::Event<Self::Event>,
74 ) -> (Option<key::NewPressedKey<R>>, key::KeyEvents<Self::Event>) {
75 panic!()
76 }
77
78 fn update_state(
79 &self,
80 _key_state: &mut Self::KeyState,
81 _ref: &Self::Ref,
82 _context: &Self::Context,
83 _keymap_index: u16,
84 _event: key::Event<Self::Event>,
85 ) -> key::KeyEvents<Self::Event> {
86 key::KeyEvents::no_events()
87 }
88
89 fn key_output(
90 &self,
91 key_ref: &Self::Ref,
92 _key_state: &Self::KeyState,
93 ) -> Option<key::KeyOutput> {
94 match key_ref {
95 Ref::UsageCode(uc) => Some(key::KeyOutput::from_consumer_code(*uc)),
96 }
97 }
98}
99
100#[cfg(test)]
101mod tests {
102 use super::*;
103
104 #[test]
105 fn test_sizeof_ref() {
106 assert_eq!(1, core::mem::size_of::<Ref>());
107 }
108
109 #[test]
110 fn test_sizeof_event() {
111 assert_eq!(0, core::mem::size_of::<Event>());
112 }
113}