jwalk/core/
read_dir.rs

1use super::{ClientState, DirEntry, IndexPath, Ordered, ReadDirSpec};
2use crate::Result;
3
4/// Results of successfully reading a directory.
5#[derive(Debug)]
6pub struct ReadDir<C: ClientState> {
7    pub(crate) read_dir_state: C::ReadDirState,
8    pub(crate) results_list: Vec<Result<DirEntry<C>>>,
9}
10
11impl<C: ClientState> ReadDir<C> {
12    pub fn new(
13        read_dir_state: C::ReadDirState,
14        results_list: Vec<Result<DirEntry<C>>>,
15    ) -> ReadDir<C> {
16        ReadDir {
17            read_dir_state,
18            results_list,
19        }
20    }
21
22    pub fn read_children_specs(&self) -> impl Iterator<Item = ReadDirSpec<C>> + '_ {
23        self.results_list.iter().filter_map(move |each| {
24            each.as_ref()
25                .ok()?
26                .read_children_spec(self.read_dir_state.clone())
27        })
28    }
29
30    pub fn ordered_read_children_specs(
31        &self,
32        index_path: &IndexPath,
33    ) -> Vec<Ordered<ReadDirSpec<C>>> {
34        self.read_children_specs()
35            .enumerate()
36            .map(|(i, spec)| Ordered::new(spec, index_path.adding(i), 0))
37            .collect()
38    }
39}