1use camino::{Utf8Path, Utf8PathBuf};
2use walkdir::WalkDir;
3
4pub fn scan_font_directory(root: impl AsRef<Utf8Path>) -> impl Iterator<Item = Utf8PathBuf> {
5 WalkDir::new(root.as_ref())
6 .into_iter()
7 .filter_map(Result::ok)
8 .filter(|entry| entry.file_type().is_file())
9 .filter_map(|file_entry| Utf8PathBuf::from_path_buf(file_entry.into_path()).ok())
10 .filter(|path| {
11 path.extension().is_some_and(|ext| {
12 ["ttf", "otf", "ttc"]
13 .iter()
14 .any(|v| ext.eq_ignore_ascii_case(v))
15 })
16 })
17}
18
19#[cfg(all(test, not(ci)))]
20mod tests {
21 use super::*;
22
23 #[test]
24 fn test_scan_font_directory() {
25 let root = Utf8Path::new(r"G:\Data\fonts");
26 let paths = scan_font_directory(&root);
27 println!("Found {} fonts", paths.count());
28 }
29}