use std::marker::PhantomData; use std::pin::Pin; use std::task::{Context, Poll}; use crate::stream::{Stream, DoubleEndedStream, ExactSizeStream, FusedStream}; /// A stream that never returns any items. /// /// This stream is created by the [`pending`] function. See its /// documentation for more. /// /// [`pending`]: fn.pending.html #[derive(Debug)] pub struct Pending { _marker: PhantomData } /// Creates a stream that never returns any items. /// /// The returned stream will always return `Pending` when polled. pub fn pending() -> Pending { Pending { _marker: PhantomData } } impl Stream for Pending { type Item = T; fn poll_next(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Pending } } impl DoubleEndedStream for Pending { fn poll_next_back(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll> { Poll::Pending } } impl FusedStream for Pending {} impl ExactSizeStream for Pending { fn len(&self) -> usize { 0 } }