use core::marker::PhantomData; use core::pin::Pin; use core::task::{Context, Poll}; use crate::stream::{DoubleEndedStream, ExactSizeStream, FusedStream, Stream}; /// 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. /// # Examples /// /// ``` /// # async_std::task::block_on(async { /// # /// use std::time::Duration; /// /// use async_std::prelude::*; /// use async_std::stream; /// /// let dur = Duration::from_millis(100); /// let mut s = stream::pending::<()>().timeout(dur); /// /// let item = s.next().await; /// /// assert!(item.is_some()); /// assert!(item.unwrap().is_err()); /// /// # /// # }) /// ``` 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 } }