1use std::fmt;
2use std::pin::Pin;
3
4use crate::io::{self, Write};
5use crate::task::{Context, Poll};
6
7/// Creates a writer that consumes and drops all data.
8///
9/// # Examples
10///
11/// ```rust
12/// # fn main() -> std::io::Result<()> { async_std::task::block_on(async {
13/// #
14/// use async_std::io;
15/// use async_std::prelude::*;
16///
17/// let mut writer = io::sink();
18/// writer.write(b"hello world").await?;
19/// #
20/// # Ok(()) }) }
21/// ```
22pub fn sink() -> Sink {
23 Sink { _private: () }
24}
25
26/// A writer that consumes and drops all data.
27///
28/// This writer is constructed by the [`sink`] function. See its documentation
29/// for more.
30///
31/// [`sink`]: fn.sink.html
32pub struct Sink {
33 _private: (),
34}
35
36impl fmt::Debug for Sink {
37 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
38 f.pad("Sink { .. }")
39 }
40}
41
42impl Write for Sink {
43 #[inline]
44 fn poll_write(
45 self: Pin<&mut Self>,
46 _: &mut Context<'_>,
47 buf: &[u8],
48 ) -> Poll<io::Result<usize>> {
49 Poll::Ready(Ok(buf.len()))
50 }
51
52 #[inline]
53 fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> {
54 Poll::Ready(Ok(()))
55 }
56
57 #[inline]
58 fn poll_close(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<io::Result<()>> {
59 Poll::Ready(Ok(()))
60 }
61}
62