1use crate::io::AsyncWrite;
2
3use std::fmt;
4use std::io;
5use std::pin::Pin;
6use std::task::{Context, Poll};
7
8cfg_io_util! {
9 /// An async writer which will move data into the void.
10 ///
11 /// This struct is generally created by calling [`sink`][sink]. Please
12 /// see the documentation of `sink()` for more details.
13 ///
14 /// This is an asynchronous version of [`std::io::Sink`][std].
15 ///
16 /// [sink]: sink()
17 /// [std]: std::io::Sink
18 pub struct Sink {
19 _p: (),
20 }
21
22 /// Creates an instance of an async writer which will successfully consume all
23 /// data.
24 ///
25 /// All calls to [`poll_write`] on the returned instance will return
26 /// `Poll::Ready(Ok(buf.len()))` and the contents of the buffer will not be
27 /// inspected.
28 ///
29 /// This is an asynchronous version of [`std::io::sink`][std].
30 ///
31 /// [`poll_write`]: crate::io::AsyncWrite::poll_write()
32 /// [std]: std::io::sink
33 ///
34 /// # Examples
35 ///
36 /// ```
37 /// use tokio::io::{self, AsyncWriteExt};
38 ///
39 /// #[tokio::main]
40 /// async fn main() -> io::Result<()> {
41 /// let buffer = vec![1, 2, 3, 5, 8];
42 /// let num_bytes = io::sink().write(&buffer).await?;
43 /// assert_eq!(num_bytes, 5);
44 /// Ok(())
45 /// }
46 /// ```
47 pub fn sink() -> Sink {
48 Sink { _p: () }
49 }
50}
51
52impl AsyncWrite for Sink {
53 #[inline]
54 fn poll_write(
55 self: Pin<&mut Self>,
56 _: &mut Context<'_>,
57 buf: &[u8],
58 ) -> Poll<Result<usize, io::Error>> {
59 Poll::Ready(Ok(buf.len()))
60 }
61
62 #[inline]
63 fn poll_flush(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<(), io::Error>> {
64 Poll::Ready(Ok(()))
65 }
66
67 #[inline]
68 fn poll_shutdown(self: Pin<&mut Self>, _: &mut Context<'_>) -> Poll<Result<(), io::Error>> {
69 Poll::Ready(Ok(()))
70 }
71}
72
73impl fmt::Debug for Sink {
74 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
75 f.pad("Sink { .. }")
76 }
77}
78
79#[cfg(test)]
80mod tests {
81 use super::*;
82
83 #[test]
84 fn assert_unpin() {
85 crate::is_unpin::<Sink>();
86 }
87}
88