code-scanner-driver 0.1.1

Driver for barcode scanners and keyboard input with GTIN validation, async streaming, and burst detection.
Documentation
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)
    }
}