wireman_event_handler/
crossterm.rs1use 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}