use std::time::Duration;
use anyhow::Result;
use crossterm::event::{self, KeyEvent};
pub enum Event {
Key(KeyEvent),
Tick,
#[allow(dead_code)]
Resize(u16, u16),
}
pub struct EventLoop {
tick_rate: Duration,
}
impl EventLoop {
pub fn new(tick_rate_ms: u64) -> Self {
Self {
tick_rate: Duration::from_millis(tick_rate_ms),
}
}
pub fn next(&self) -> Result<Event> {
if event::poll(self.tick_rate)? {
match event::read()? {
event::Event::Key(key) => Ok(Event::Key(key)),
event::Event::Resize(w, h) => Ok(Event::Resize(w, h)),
_ => Ok(Event::Tick),
}
} else {
Ok(Event::Tick)
}
}
}