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}