use std::path::PathBuf; use anyhow::{Context, Result}; use log::trace; use walkdir::{DirEntry, WalkDir}; use crate::mapping::{map_tree::MappingTree, MapKey, Mapping}; pub struct MappingsGenerator { mappings: MappingTree, paths_to_process: Vec, } fn is_dir(entry: &DirEntry) -> bool { entry.file_type().is_dir() } impl MappingsGenerator { pub async fn new( directories_to_scan: Vec, max_depth: usize, home_path: PathBuf, ) -> Result { let mut mappings = MappingTree::new(); for dir in directories_to_scan { for dir2 in WalkDir::new(&dir) .max_depth(max_depth) .into_iter() .filter_entry(|e| is_dir(e)) { let directory = dir2.with_context(|| format!("Failed to read dir ('{}')", &dir.display()))?; trace!("Processed '{}'..", directory.path().display()); let mapping = Mapping::new(&home_path, directory.path().to_path_buf()); let mapping_key = mapping.key.clone(); mappings.insert(&mapping_key, mapping).with_context(|| { format!( "Failed to insert '{}' for path: '{}'\nMapTree is now: \n{}", MapKey::display(&mapping_key), directory.path().display(), mappings, ) })?; } } todo!() } }