use crossterm::event::KeyEvent;
use std::time::Duration;
use tokio::sync::mpsc;
#[derive(Debug, Clone, Copy, PartialEq)]
pub enum Event {
Key(KeyEvent),
Tick,
Error,
Quit,
}
pub fn start_tick_generator(interval: Duration) -> mpsc::Receiver<Event> {
let (sender, receiver) = mpsc::channel(100);
tokio::spawn(async move {
let mut interval_stream = tokio::time::interval(interval);
loop {
interval_stream.tick().await;
if let Err(e) = sender.send(Event::Tick).await {
eprintln!("Failed to send tick event: {}", e);
break;
}
}
});
receiver
}