pub mod folders;
use std::collections::{HashMap, HashSet};
use folders::missing_files_folders::validate_missing_items;
pub use folders::types::{AlertFileStructure, FolderStructure};
use folders::{extra_files_folder::validate_extra_items, types::ResultValidationTypes};
fn merge_deduplicate<'a>(vec1: Vec<&'a str>, vec2: Vec<&'a str>) -> Vec<&'a str> {
let mut set: HashSet<&str> = HashSet::new();
set.extend(vec1);
set.extend(vec2);
set.into_iter().collect()
}
pub struct ValidateDirTree<'a> {
pub required_extensions: Vec<&'a str>,
pub valid_extensions: Vec<&'a str>,
}
impl ValidateDirTree<'_> {
pub fn validate_structure(
&self,
project_path: &str,
folder_structure_json: &str,
) -> ResultValidationTypes {
let mut missing_items: Vec<AlertFileStructure> = vec![];
let mut list_of_files_found: HashMap<String, String> = HashMap::new();
let folder_structure: FolderStructure =
serde_json::from_str(folder_structure_json).expect("Failed to deserialize JSON");
validate_missing_items(
project_path,
Some(&folder_structure.folders),
&mut missing_items,
&self.required_extensions,
&mut list_of_files_found,
);
let all_extensions = merge_deduplicate(
self.required_extensions.clone(),
self.valid_extensions.clone(),
);
validate_extra_items(
project_path,
Some(&folder_structure.folders),
&mut missing_items,
&all_extensions,
&mut list_of_files_found,
);
ResultValidationTypes {
alert_file_structure: missing_items,
list_of_files_found,
}
}
}