diff --git a/src/utils.rs b/src/utils.rs new file mode 100644 index 0000000..e0ffa47 --- /dev/null +++ b/src/utils.rs @@ -0,0 +1,31 @@ +use std::{ + fs::{self, DirEntry}, + path::{Path, PathBuf}, +}; + +pub fn walk_files_recursive( + root: impl AsRef, +) -> std::io::Result> { + fn visit(dir: &Path, out: &mut Vec) -> std::io::Result<()> { + for entry in fs::read_dir(dir)? { + let entry = entry?; + let path = entry.path(); + let file_type = entry.file_type()?; + + if file_type.is_dir() { + visit(&path, out)?; + } else if file_type.is_file() { + out.push(entry); + } + } + Ok(()) + } + + let mut files = Vec::new(); + visit(root.as_ref(), &mut files)?; + Ok(files.into_iter()) +} + +pub fn path_to_lowercase(path: impl AsRef) -> PathBuf { + PathBuf::from(path.as_ref().to_string_lossy().to_lowercase()) +}