use core::input::TerminalEvent;
use std::time::Duration;
use super::InputError;
pub trait EventLoop {
fn poll(&self) -> Result<TerminalEvent, InputError>;
}
pub struct DefaultEventLoop;
impl EventLoop for DefaultEventLoop {
fn poll(&self) -> Result<TerminalEvent, InputError> {
match crossterm::event::poll(Duration::MAX) {
Ok(true) => match crossterm::event::read() {
Ok(event) => match event.try_into() {
Ok(terminal_event) => Ok(terminal_event),
Err(_) => Err(InputError::Unsupported),
},
Err(error) => Err(InputError::IO(error)),
},
Ok(false) => panic!("Time's up"),
Err(error) => Err(InputError::IO(error)),
}
}
}