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