summaryrefslogtreecommitdiffstats
path: root/libimagutil
diff options
context:
space:
mode:
authorJohn Sirois <john.sirois@gmail.com>2016-07-13 12:37:19 -0600
committerJohn Sirois <john.sirois@gmail.com>2016-07-13 12:43:04 -0600
commit2c40b8734eece9f1a265dc4ede9d244788a79bc4 (patch)
tree704f9760cec984a87b377349dd5f44ed9fcea334 /libimagutil
parent3a2010c35baffced9e62f0cd2d71cd3741702ad3 (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.rs8
-rw-r--r--libimagutil/src/lib.rs1
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;