Skip to main content

flash_font/
scanner.rs

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}