use std::fs;
use std::path::Path;
use std::path::PathBuf;
use text_tree_elements::TextTreeElements;
fn list_files(
path: &Path,
ignore: Option<&Vec<&str>>,
tree: &TextTreeElements,
prefixes: &str,
level: usize,
index: usize,
size: usize,
) {
let (prefix, branch) = tree.get_prefix_branch(level, index, size);
if let Some(file_name) = path.file_name() {
let file_name = file_name.to_str().unwrap();
if let Some(v) = ignore {
if v.contains(&file_name) {
return;
}
}
println!("{}{}{}", prefixes, branch, file_name);
}
if let Ok(files) = fs::read_dir(path) {
let files = files.collect::<Result<Vec<_>, _>>().unwrap();
let prefixes = format!("{}{}", prefixes, prefix);
let size = files.len();
for (i, file) in files.iter().enumerate() {
let dir = file.path();
list_files(&dir, ignore, tree, &prefixes, level + 1, i, size)
}
}
}
fn main() {
let path = PathBuf::from(".");
let path_str = path.as_os_str().to_str().unwrap();
let prefixes = "";
let ignore = vec![".git", "target"];
println!("\n\n{}", path_str);
let tree = TextTreeElements::default();
list_files(&path, Some(&ignore), &tree, prefixes, 0, 0, 1);
println!("\n\n{}", path_str);
let tree = TextTreeElements::new(["", "", "| ", " "], ["", "", "|- ", "'- "]);
list_files(&path, Some(&ignore), &tree, prefixes, 0, 0, 1);
println!("\n\n{}", path_str);
let tree = TextTreeElements::new(["", "", " ", " "], ["", "", " ", " "]);
list_files(&path, Some(&ignore), &tree, prefixes, 0, 0, 1);
}