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> Default for System<R> {
46 fn default() -> Self {
47 Self::new()
48 }
49}
50
51impl<R: Debug> key::System<R> for System<R> {
52 type Ref = Ref;
53 type Context = Context;
54 type Event = Event;
55 type PendingKeyState = PendingKeyState;
56 type KeyState = KeyState;
57
58 fn new_pressed_key(
59 &self,
60 _keymap_index: u16,
61 _context: &Self::Context,
62 _key_ref: Ref,
63 ) -> (
64 key::PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>,
65 key::KeyEvents<Self::Event>,
66 ) {
67 (
68 key::PressedKeyResult::Resolved(KeyState),
69 key::KeyEvents::no_events(),
70 )
71 }
72
73 fn update_pending_state(
74 &self,
75 _pending_state: &mut Self::PendingKeyState,
76 _keymap_index: u16,
77 _context: &Self::Context,
78 _key_ref: Ref,
79 _event: key::Event<Self::Event>,
80 ) -> (Option<key::NewPressedKey<R>>, key::KeyEvents<Self::Event>) {
81 panic!()
82 }
83
84 fn update_state(
85 &self,
86 _key_state: &mut Self::KeyState,
87 _ref: &Self::Ref,
88 _context: &Self::Context,
89 _keymap_index: u16,
90 _event: key::Event<Self::Event>,
91 ) -> key::KeyEvents<Self::Event> {
92 key::KeyEvents::no_events()
93 }
94
95 fn key_output(
96 &self,
97 key_ref: &Self::Ref,
98 _key_state: &Self::KeyState,
99 ) -> Option<key::KeyOutput> {
100 match key_ref {
101 Ref::UsageCode(uc) => Some(key::KeyOutput::from_consumer_code(*uc)),
102 }
103 }
104}
105
106#[cfg(test)]
107mod tests {
108 use super::*;
109
110 #[test]
111 fn test_sizeof_ref() {
112 assert_eq!(1, core::mem::size_of::<Ref>());
113 }
114
115 #[test]
116 fn test_sizeof_event() {
117 assert_eq!(0, core::mem::size_of::<Event>());
118 }
119}