use crossterm::event::EventStream;
use futures_util::{FutureExt, StreamExt};
use miette::IntoDiagnostic;
use crate::{CrosstermEventResult, PinnedInputStream};
pub struct InputDevice {
pub resource: PinnedInputStream<CrosstermEventResult>,
}
impl InputDevice {
pub fn new_event_stream() -> InputDevice {
InputDevice {
resource: Box::pin(EventStream::new()),
}
}
}
impl InputDevice {
pub async fn next(&mut self) -> miette::Result<crossterm::event::Event> {
match self.resource.next().fuse().await {
Some(it) => it.into_diagnostic(),
None => miette::bail!("Failed to get next event from input source."),
}
}
}