wireman_event_handler/
crossterm.rs

1use crossterm::event::KeyCode as CTKeyCode;
2use crossterm::event::KeyEvent as CTKeyEvent;
3use crossterm::event::KeyEventKind as CTKeyEventKind;
4use crossterm::event::KeyEventState as CTKeyEventState;
5use crossterm::event::KeyModifiers as CTKeyModifiers;
6
7use crate::KeyCode;
8use crate::KeyEvent;
9use crate::KeyModifier;
10use crate::KeyModifiers;
11
12impl From<CTKeyEvent> for KeyEvent {
13    fn from(value: CTKeyEvent) -> Self {
14        Self {
15            code: value.code.into(),
16            modifiers: value.modifiers.into(),
17        }
18    }
19}
20impl From<KeyEvent> for CTKeyEvent {
21    fn from(value: KeyEvent) -> Self {
22        Self {
23            code: value.code.into(),
24            modifiers: value.modifiers.into(),
25            kind: CTKeyEventKind::Press,
26            state: CTKeyEventState::empty(),
27        }
28    }
29}
30
31impl From<CTKeyModifiers> for KeyModifiers {
32    fn from(value: CTKeyModifiers) -> Self {
33        let ct_modifiers = vec![
34            (CTKeyModifiers::SHIFT, KeyModifier::Shift),
35            (CTKeyModifiers::CONTROL, KeyModifier::Control),
36            (CTKeyModifiers::ALT, KeyModifier::Alt),
37            (CTKeyModifiers::SUPER, KeyModifier::Super),
38            (CTKeyModifiers::HYPER, KeyModifier::Hyper),
39            (CTKeyModifiers::META, KeyModifier::Meta),
40        ];
41        let mut modifiers = Self::new();
42        for modifier in ct_modifiers {
43            if value.contains(modifier.0) {
44                modifiers = modifiers.add_modifier(modifier.1);
45            }
46        }
47        modifiers
48    }
49}
50
51impl From<KeyModifiers> for CTKeyModifiers {
52    fn from(value: KeyModifiers) -> Self {
53        let ct_modifiers = vec![
54            (CTKeyModifiers::SHIFT, KeyModifier::Shift),
55            (CTKeyModifiers::CONTROL, KeyModifier::Control),
56            (CTKeyModifiers::ALT, KeyModifier::Alt),
57            (CTKeyModifiers::SUPER, KeyModifier::Super),
58            (CTKeyModifiers::HYPER, KeyModifier::Hyper),
59            (CTKeyModifiers::META, KeyModifier::Meta),
60        ];
61        let mut modifiers = Self::NONE;
62        for modifier in ct_modifiers {
63            if value.contains(modifier.1) {
64                modifiers.insert(modifier.0);
65            }
66        }
67        modifiers
68    }
69}
70
71impl From<CTKeyCode> for KeyCode {
72    fn from(value: CTKeyCode) -> Self {
73        match value {
74            CTKeyCode::Backspace => Self::Backspace,
75            CTKeyCode::Enter => Self::Enter,
76            CTKeyCode::Left => Self::Left,
77            CTKeyCode::Right => Self::Right,
78            CTKeyCode::Up => Self::Up,
79            CTKeyCode::Down => Self::Down,
80            CTKeyCode::Home => Self::Home,
81            CTKeyCode::End => Self::End,
82            CTKeyCode::PageUp => Self::PageUp,
83            CTKeyCode::PageDown => Self::PageDown,
84            CTKeyCode::Tab => Self::Tab,
85            CTKeyCode::BackTab => Self::BackTab,
86            CTKeyCode::Delete => Self::Delete,
87            CTKeyCode::Insert => Self::Insert,
88            CTKeyCode::F(f) => Self::F(f),
89            CTKeyCode::Char(c) => Self::Char(c),
90            CTKeyCode::Null => Self::Null,
91            CTKeyCode::Esc => Self::Esc,
92            _ => Self::Unknown,
93        }
94    }
95}
96
97impl From<KeyCode> for CTKeyCode {
98    fn from(value: KeyCode) -> Self {
99        match value {
100            KeyCode::Backspace => Self::Backspace,
101            KeyCode::Enter => Self::Enter,
102            KeyCode::Left => Self::Left,
103            KeyCode::Right => Self::Right,
104            KeyCode::Up => Self::Up,
105            KeyCode::Down => Self::Down,
106            KeyCode::Home => Self::Home,
107            KeyCode::End => Self::End,
108            KeyCode::PageUp => Self::PageUp,
109            KeyCode::PageDown => Self::PageDown,
110            KeyCode::Tab => Self::Tab,
111            KeyCode::BackTab => Self::BackTab,
112            KeyCode::Delete => Self::Delete,
113            KeyCode::Insert => Self::Insert,
114            KeyCode::F(f) => Self::F(f),
115            KeyCode::Char(c) => Self::Char(c),
116            KeyCode::Esc => Self::Esc,
117            KeyCode::Null | KeyCode::Unknown => Self::Null,
118        }
119    }
120}