use std::{ pin::Pin, task::{Context, Poll}, }; use crossbeam::channel; use futures::Stream; pub struct CrossbeamReceiverStream { receiver: channel::Receiver, } impl CrossbeamReceiverStream { pub fn new(receiver: channel::Receiver) -> Self { Self { receiver } } } impl Stream for CrossbeamReceiverStream { type Item = T; fn poll_next(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { match self.receiver.try_recv() { Ok(item) => Poll::Ready(Some(item)), Err(channel::TryRecvError::Empty) => Poll::Pending, Err(channel::TryRecvError::Disconnected) => Poll::Ready(None), } } }