feat: refactor architecture #4
@@ -0,0 +1,38 @@
|
||||
use crossterm::event::{self, Event, KeyCode, KeyModifiers};
|
||||
use crate::msg::Message;
|
||||
|
||||
pub fn handle_event(event: Event) -> Option<Message> {
|
||||
if let Event::Key(key) = event
|
||||
&& key.kind == event::KeyEventKind::Press
|
||||
{
|
||||
match key.code {
|
||||
KeyCode::Char('q') | KeyCode::Char('Q') => Some(Message::Quit),
|
||||
KeyCode::Char('c') if key.modifiers.contains(KeyModifiers::CONTROL) => Some(Message::Quit),
|
||||
KeyCode::Char(' ') => Some(Message::ToggleRunning),
|
||||
KeyCode::Char('s') | KeyCode::Char('S') => Some(Message::ToggleMode),
|
||||
KeyCode::Char('r') | KeyCode::Char('R') => Some(Message::Reset),
|
||||
KeyCode::Char('?') => Some(Message::ToggleHelp),
|
||||
_ => None,
|
||||
}
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
use crossterm::event::KeyEvent;
|
||||
|
||||
#[test]
|
||||
fn handle_event_when_called_maps_key_presses_to_messages() {
|
||||
let key_event = Event::Key(KeyEvent::new(KeyCode::Char(' '), KeyModifiers::NONE));
|
||||
assert_eq!(handle_event(key_event), Some(Message::ToggleRunning));
|
||||
|
||||
let key_event_q = Event::Key(KeyEvent::new(KeyCode::Char('q'), KeyModifiers::NONE));
|
||||
assert_eq!(handle_event(key_event_q), Some(Message::Quit));
|
||||
|
||||
let key_event_unknown = Event::Key(KeyEvent::new(KeyCode::Char('z'), KeyModifiers::NONE));
|
||||
assert_eq!(handle_event(key_event_unknown), None);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user