Simplify find_files::FindFilesIter::next
with the help of a helper macro
This commit is contained in:
parent
71256b7ff4
commit
16589ec6f3
35
src/main.rs
35
src/main.rs
|
@ -39,15 +39,24 @@ fn find_subs(root: &Path, match_str: &OsStr) -> io::Result<Option<PathBuf>> {
|
||||||
Ok(None)
|
Ok(None)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macro_rules! nested_try {
|
||||||
|
($ex:expr) => {
|
||||||
|
match $ex {
|
||||||
|
Ok(val) => val,
|
||||||
|
Err(e) => return Some(Err(e)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn find_files(
|
fn find_files(
|
||||||
root: &Path,
|
root: &Path,
|
||||||
extension: &OsStr,
|
extension: &OsStr,
|
||||||
) -> io::Result<impl Iterator<Item = io::Result<PathBuf>>> {
|
) -> io::Result<impl Iterator<Item = io::Result<PathBuf>>> {
|
||||||
struct FindFonts {
|
struct FindFilesIter {
|
||||||
read_dirs: Vec<ReadDir>,
|
read_dirs: Vec<ReadDir>,
|
||||||
extension: OsString,
|
extension: OsString,
|
||||||
}
|
}
|
||||||
impl Iterator for FindFonts {
|
impl Iterator for FindFilesIter {
|
||||||
type Item = io::Result<PathBuf>;
|
type Item = io::Result<PathBuf>;
|
||||||
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
@ -56,22 +65,12 @@ fn find_files(
|
||||||
self.read_dirs.pop();
|
self.read_dirs.pop();
|
||||||
continue;
|
continue;
|
||||||
};
|
};
|
||||||
let entry = match next {
|
let entry = nested_try!(next);
|
||||||
Ok(entry) => entry,
|
let file_type = nested_try!(entry.file_type());
|
||||||
Err(e) => return Some(Err(e)),
|
|
||||||
};
|
|
||||||
let file_type = match entry.file_type() {
|
|
||||||
Err(e) => return Some(Err(e)),
|
|
||||||
Ok(file_type) => file_type,
|
|
||||||
};
|
|
||||||
if file_type.is_dir() {
|
if file_type.is_dir() {
|
||||||
match entry.path().read_dir() {
|
let read_dir = nested_try!(entry.path().read_dir());
|
||||||
Err(e) => return Some(Err(e)),
|
self.read_dirs.push(read_dir);
|
||||||
Ok(read_dir) => {
|
continue;
|
||||||
self.read_dirs.push(read_dir);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
let path = entry.path();
|
let path = entry.path();
|
||||||
if path.extension().is_some_and(|ex| ex == self.extension) {
|
if path.extension().is_some_and(|ex| ex == self.extension) {
|
||||||
|
@ -83,7 +82,7 @@ fn find_files(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(FindFonts {
|
Ok(FindFilesIter {
|
||||||
read_dirs: vec![root.read_dir()?],
|
read_dirs: vec![root.read_dir()?],
|
||||||
extension: extension.to_owned(),
|
extension: extension.to_owned(),
|
||||||
})
|
})
|
||||||
|
|
Loading…
Reference in a new issue