diff options
author | John Sirois <john.sirois@gmail.com> | 2016-07-13 12:37:19 -0600 |
---|---|---|
committer | John Sirois <john.sirois@gmail.com> | 2016-07-13 12:43:04 -0600 |
commit | 2c40b8734eece9f1a265dc4ede9d244788a79bc4 (patch) | |
tree | 704f9760cec984a87b377349dd5f44ed9fcea334 /libimagutil | |
parent | 3a2010c35baffced9e62f0cd2d71cd3741702ad3 (diff) |
Add a `fold_ok` utility.
Add a utility that folds an iterator into a result and uses it to reduce
boilerplate in the codebase.
Diffstat (limited to 'libimagutil')
-rw-r--r-- | libimagutil/src/iter.rs | 8 | ||||
-rw-r--r-- | libimagutil/src/lib.rs | 1 |
2 files changed, 9 insertions, 0 deletions
diff --git a/libimagutil/src/iter.rs b/libimagutil/src/iter.rs new file mode 100644 index 00000000..0f682bff --- /dev/null +++ b/libimagutil/src/iter.rs @@ -0,0 +1,8 @@ +/// Processes `iter` returning the last successful result or the first error. +pub fn fold_ok<X, I, R, E, F>(iter: I, mut func: F) -> Result<R, E> + where I: Iterator<Item = X>, + R: Default, + F: FnMut(X) -> Result<R, E> +{ + iter.fold(Ok(R::default()), |acc, item| acc.and_then(|_| func(item))) +} diff --git a/libimagutil/src/lib.rs b/libimagutil/src/lib.rs index bde49b00..730970e8 100644 --- a/libimagutil/src/lib.rs +++ b/libimagutil/src/lib.rs @@ -18,5 +18,6 @@ extern crate regex; pub mod ismatch; +pub mod iter; pub mod key_value_split; pub mod variants; |