use tokio::sync::mpsc;
use tokio_stream::{wrappers::ReceiverStream, Stream};
use anyhow::Result;
use crate::event::scanner_event::ScannerEvent;
use crate::keyboard::manager::start_keyboard_worker;
pub struct ScannerStream {
inner: ReceiverStream<ScannerEvent>,
}
impl ScannerStream {
pub fn new() -> Result<Self> {
let (tx, rx) = mpsc::channel(64);
start_keyboard_worker(tx)?;
Ok(Self {
inner: ReceiverStream::new(rx),
})
}
}
impl Stream for ScannerStream {
type Item = ScannerEvent;
fn poll_next(
mut self: std::pin::Pin<&mut Self>,
cx: &mut std::task::Context<'_>,
) -> std::task::Poll<Option<Self::Item>> {
std::pin::Pin::new(&mut self.inner).poll_next(cx)
}
}