code_scanner_driver/
stream.rs1use tokio::sync::mpsc;
2use tokio_stream::{wrappers::ReceiverStream, Stream};
3use anyhow::Result;
4use crate::event::scanner_event::ScannerEvent;
5use crate::keyboard::manager::start_keyboard_worker;
6
7pub struct ScannerStream {
8 inner: ReceiverStream<ScannerEvent>,
9}
10
11impl ScannerStream {
12 pub fn new() -> Result<Self> {
13 let (tx, rx) = mpsc::channel(64);
14
15 start_keyboard_worker(tx)?;
16
17 Ok(Self {
18 inner: ReceiverStream::new(rx),
19 })
20 }
21}
22
23impl Stream for ScannerStream {
24 type Item = ScannerEvent;
25
26 fn poll_next(
27 mut self: std::pin::Pin<&mut Self>,
28 cx: &mut std::task::Context<'_>,
29 ) -> std::task::Poll<Option<Self::Item>> {
30 std::pin::Pin::new(&mut self.inner).poll_next(cx)
31 }
32}