use crossterm::event::{
self, Event as CrosstermEvent, KeyCode, KeyEvent, KeyModifiers, MouseEvent,
};
use std::time::Duration;
#[derive(Debug)]
pub enum AppEvent {
Key(KeyEvent),
Mouse(MouseEvent),
Resize(u16, u16),
Tick,
}
pub fn poll_event(timeout: Duration) -> Option<AppEvent> {
if event::poll(timeout).ok()? {
match event::read().ok()? {
CrosstermEvent::Key(key) => Some(AppEvent::Key(key)),
CrosstermEvent::Mouse(mouse) => Some(AppEvent::Mouse(mouse)),
CrosstermEvent::Resize(w, h) => Some(AppEvent::Resize(w, h)),
_ => None,
}
} else {
Some(AppEvent::Tick)
}
}
pub fn is_quit(key: &KeyEvent) -> bool {
matches!(key.code, KeyCode::Char('q'))
|| (key.modifiers.contains(KeyModifiers::CONTROL) && key.code == KeyCode::Char('c'))
}