use crate::never::Never; use core::marker::PhantomData; use core::pin::Pin; use futures_core::task::{Context, Poll}; use futures_sink::Sink; /// Sink for the [`drain`] function. #[derive(Debug)] #[must_use = "sinks do nothing unless polled"] pub struct Drain { marker: PhantomData, } /// Create a sink that will just discard all items given to it. /// /// Similar to [`io::Sink`](::std::io::Sink). /// /// # Examples /// /// ``` /// # futures::executor::block_on(async { /// use futures::sink::{self, SinkExt}; /// /// let mut drain = sink::drain(); /// drain.send(5).await?; /// # Ok::<(), futures::never::Never>(()) }).unwrap(); /// ``` pub fn drain() -> Drain { Drain { marker: PhantomData } } impl Unpin for Drain {} impl Sink for Drain { type Error = Never; fn poll_ready( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn start_send( self: Pin<&mut Self>, _item: T, ) -> Result<(), Self::Error> { Ok(()) } fn poll_flush( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } fn poll_close( self: Pin<&mut Self>, _cx: &mut Context<'_>, ) -> Poll> { Poll::Ready(Ok(())) } }