smart_keymap/key/
custom.rs

1use core::fmt::Debug;
2
3use serde::Deserialize;
4
5use crate::key;
6
7/// Reference for a custom key.
8#[derive(Deserialize, Debug, Clone, Copy, PartialEq)]
9pub struct Ref(pub u8);
10
11/// The context type for keymap callback keys. (No events).
12#[derive(Debug, Clone, Copy, PartialEq)]
13pub struct Context;
14
15/// The event type for keymap callback keys. (No events).
16#[derive(Debug, Clone, Copy, PartialEq)]
17pub struct Event;
18
19/// The pending key state type for keymap callback keys. (No pending state).
20#[derive(Debug, Clone, Copy, PartialEq)]
21pub struct PendingKeyState;
22
23/// Key state used by [System]. (No state).
24#[derive(Debug, Clone, Copy, PartialEq)]
25pub struct KeyState;
26
27/// The [key::System] implementation for custom keys.
28#[derive(Debug, Clone, Copy, PartialEq)]
29pub struct System;
30
31impl System {
32    /// Constructs a new [System] with the given key data.
33    pub const fn new() -> Self {
34        Self
35    }
36}
37
38impl Default for System {
39    fn default() -> Self {
40        Self::new()
41    }
42}
43
44impl<R> key::System<R> for System {
45    type Ref = Ref;
46    type Context = Context;
47    type Event = Event;
48    type PendingKeyState = PendingKeyState;
49    type KeyState = KeyState;
50
51    fn new_pressed_key(
52        &self,
53        _keymap_index: u16,
54        _context: &Self::Context,
55        _key_ref: Ref,
56    ) -> (
57        key::PressedKeyResult<R, Self::PendingKeyState, Self::KeyState>,
58        key::KeyEvents<Self::Event>,
59    ) {
60        let pkr = key::PressedKeyResult::Resolved(KeyState);
61        let pke = key::KeyEvents::no_events();
62        (pkr, pke)
63    }
64
65    fn update_pending_state(
66        &self,
67        _pending_state: &mut Self::PendingKeyState,
68        _keymap_index: u16,
69        _context: &Self::Context,
70        _key_ref: Ref,
71        _event: key::Event<Self::Event>,
72    ) -> (Option<key::NewPressedKey<R>>, key::KeyEvents<Self::Event>) {
73        panic!()
74    }
75
76    fn update_state(
77        &self,
78        _key_state: &mut Self::KeyState,
79        _ref: &Self::Ref,
80        _context: &Self::Context,
81        _keymap_index: u16,
82        _event: key::Event<Self::Event>,
83    ) -> key::KeyEvents<Self::Event> {
84        panic!()
85    }
86
87    fn key_output(
88        &self,
89        Ref(custom_code): &Self::Ref,
90        _key_state: &Self::KeyState,
91    ) -> Option<key::KeyOutput> {
92        Some(key::KeyOutput::from_custom_code(*custom_code))
93    }
94}