| 1 | use std::fmt; |
| 2 | use std::pin::Pin; |
| 3 | |
| 4 | use crate::io::{self, BufRead, Read}; |
| 5 | use crate::task::{Context, Poll}; |
| 6 | |
| 7 | /// Creates a reader that contains no 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 buf = Vec::new(); |
| 18 | /// let mut reader = io::empty(); |
| 19 | /// reader.read_to_end(&mut buf).await?; |
| 20 | /// |
| 21 | /// assert!(buf.is_empty()); |
| 22 | /// # |
| 23 | /// # Ok(()) }) } |
| 24 | /// ``` |
| 25 | pub fn empty() -> Empty { |
| 26 | Empty { _private: () } |
| 27 | } |
| 28 | |
| 29 | /// A reader that contains no data. |
| 30 | /// |
| 31 | /// This reader is created by the [`empty`] function. See its |
| 32 | /// documentation for more. |
| 33 | /// |
| 34 | /// [`empty`]: fn.empty.html |
| 35 | pub struct Empty { |
| 36 | _private: (), |
| 37 | } |
| 38 | |
| 39 | impl fmt::Debug for Empty { |
| 40 | fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| 41 | f.pad("Empty { .. }" ) |
| 42 | } |
| 43 | } |
| 44 | |
| 45 | impl Read for Empty { |
| 46 | #[inline ] |
| 47 | fn poll_read( |
| 48 | self: Pin<&mut Self>, |
| 49 | _: &mut Context<'_>, |
| 50 | _: &mut [u8], |
| 51 | ) -> Poll<io::Result<usize>> { |
| 52 | Poll::Ready(Ok(0)) |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | impl BufRead for Empty { |
| 57 | #[inline ] |
| 58 | fn poll_fill_buf<'a>( |
| 59 | self: Pin<&'a mut Self>, |
| 60 | _: &mut Context<'_>, |
| 61 | ) -> Poll<io::Result<&'a [u8]>> { |
| 62 | Poll::Ready(Ok(&[])) |
| 63 | } |
| 64 | |
| 65 | #[inline ] |
| 66 | fn consume(self: Pin<&mut Self>, _: usize) {} |
| 67 | } |
| 68 | |