use std::fs;
use std::path::Path;
use colored::Colorize;
use glob::glob;
pub(crate) fn list_features(path: &str, extension: &str) {
let glob_pattern = format!("{}/**/*.{}", path, extension);
if let Ok(entries) = glob(&glob_pattern) {
for entry in entries.filter_map(Result::ok) {
if let Some(file_name) = entry.file_name() {
if file_name.to_str().unwrap() == format!("root.{}", extension) {
println!("Variation: {}", entry.parent().unwrap().file_name().unwrap().to_str().unwrap().to_uppercase().bold());
let features_path = entry.parent().unwrap().join("features");
if let Ok(features_dir) = fs::read_dir(&features_path) {
let mut folders = vec![];
for feature_entry in features_dir.filter_map(Result::ok) {
if Path::is_file(&feature_entry.path()) {
println!(" - {}", feature_entry.file_name().to_str().unwrap().replace(format!(".{}", extension).as_str(), ""));
} else if Path::is_dir(&feature_entry.path()) {
folders.push(feature_entry);
}
}
for folder in folders {
if let Some(feature_name) = folder.file_name().to_str() {
println!(" Group: {}", feature_name.to_uppercase().bold());
let feature_files = fs::read_dir(folder.path()).unwrap();
for feature_file in feature_files.filter_map(Result::ok) {
if Path::is_file(&feature_file.path()) {
println!(
" - {}/{}",
folder.file_name().to_str().unwrap(),
feature_file.file_name().to_str().unwrap().replace(format!(".{}", extension).as_str(), "")
);
}
}
}
}
println!("\n");
}
}
}
}
}
}