use std::fs;
use std::path::{Path, PathBuf};
pub fn read_directory_flat<P: AsRef<Path>>(dir_path: P) -> std::io::Result<Vec<PathBuf>> {
let mut files = Vec::new();
let dir_handle = fs::read_dir(dir_path)?;
for path in dir_handle {
let entry = path?;
let typ = entry.file_type()?;
if !typ.is_file() {
break;
}
files.push(entry.path())
}
files.sort();
Ok(files)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::file_info::path_to_filename;
#[test]
fn test_read_directory_flat() {
let files = read_directory_flat("./test-resources").unwrap();
assert_eq!(12, files.len());
let mut expected = vec![
"invalid (100) (19231).jpg",
"paris (1).jpg",
"paris (2).jpg",
"paris (3).jpg",
"paris (4).jpg",
"paris (5).jpg",
"paris (6).jpg",
"paris (7).jpg",
"paris (8).jpg",
"paris (9).jpg",
"paris (10).jpg",
"paris (734).jpg",
];
expected.sort();
let mut actual = files
.iter()
.map(|path| path_to_filename(path))
.collect::<Vec<_>>();
actual.sort();
assert_eq!(actual.as_slice(), expected);
}
}