tokio_stream/wrappers/
read_dir.rs1use crate::Stream;
2use std::io;
3use std::pin::Pin;
4use std::task::{Context, Poll};
5use tokio::fs::{DirEntry, ReadDir};
6
7#[derive(Debug)]
30#[cfg_attr(docsrs, doc(cfg(feature = "fs")))]
31pub struct ReadDirStream {
32    inner: ReadDir,
33}
34
35impl ReadDirStream {
36    pub fn new(read_dir: ReadDir) -> Self {
38        Self { inner: read_dir }
39    }
40
41    pub fn into_inner(self) -> ReadDir {
43        self.inner
44    }
45}
46
47impl Stream for ReadDirStream {
48    type Item = io::Result<DirEntry>;
49
50    fn poll_next(mut self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Option<Self::Item>> {
51        self.inner.poll_next_entry(cx).map(Result::transpose)
52    }
53}
54
55impl AsRef<ReadDir> for ReadDirStream {
56    fn as_ref(&self) -> &ReadDir {
57        &self.inner
58    }
59}
60
61impl AsMut<ReadDir> for ReadDirStream {
62    fn as_mut(&mut self) -> &mut ReadDir {
63        &mut self.inner
64    }
65}