jwalk/core/
read_dir.rs
1use super::{ClientState, DirEntry, IndexPath, Ordered, ReadDirSpec};
2use crate::Result;
3
4#[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}