summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2023-04-12 07:16:00 +0000
committerGitHub <noreply@github.com>2023-04-12 07:16:00 +0000
commit42cd8288976b30c404d35d4bcdc595d029a9ea1c (patch)
tree4f28d95d5749bc3982f0f8a315a723176303322e
parent39cfab42b852bce94132913a2a8c1944fa92aa12 (diff)
parent3e6f618d7875e7a5eeb49a2fbea5eeee098fcb97 (diff)
Merge #24
24: Document flatten r=matthiasbeyer a=johlrogge Co-authored-by: Joakim Ohlrogge <joakim.ohlrogge@gmail.com>
-rw-r--r--src/flatten.rs72
1 files changed, 44 insertions, 28 deletions
diff --git a/src/flatten.rs b/src/flatten.rs
index 257fbc8..9c61cdc 100644
--- a/src/flatten.rs
+++ b/src/flatten.rs
@@ -6,9 +6,53 @@
/// Extension trait for `Iterator<Item = Result<O, E>>` to selectively transform Oks and Errors.
pub trait Flatten<O, E>: Sized {
+ /// [flatten](Iterator::flatten) `Ok` values while leaving `Err`-values as is.
+ ///
+ /// ```
+ /// use resiter::flatten::Flatten;
+ /// use resiter::map::Map;
+ ///
+ /// let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)]
+ /// .into_iter()
+ /// .map_ok(|i| (0..i))
+ /// .map_err(|i| 0..(i * 2))
+ /// .flatten_ok()
+ /// .collect();
+ ///
+ /// assert_eq!(
+ /// mapped,
+ /// [Ok(0), Ok(0), Ok(1), Err(0..4), Err(0..0), Ok(0), Ok(1)]
+ /// );
+ /// ```
fn flatten_ok<U, O2>(self) -> FlattenOk<Self, U>
where
U: IntoIterator<Item = O2>;
+ /// [flatten](Iterator::flatten) `Err` values while leaving `Ok`-values as is.
+ ///
+ /// ```
+ /// use resiter::flatten::Flatten;
+ /// use resiter::map::Map;
+ ///
+ /// let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)]
+ /// .into_iter()
+ /// .map_ok(|i| (0..i))
+ /// .map_err(|i| 0..(i * 2))
+ /// .flatten_err()
+ /// .collect();
+ ///
+ /// assert_eq!(
+ /// mapped,
+ /// [
+ /// Ok(0..1),
+ /// Ok(0..2),
+ /// Err(0),
+ /// Err(1),
+ /// Err(2),
+ /// Err(3),
+ /// Ok(0..2),
+ /// ]
+ /// );
+ /// ```
fn flatten_err<U, E2>(self) -> FlattenErr<Self, U>
where
U: IntoIterator<Item = E2>;
@@ -114,31 +158,3 @@ where
self.iter.size_hint()
}
}
-
-#[test]
-fn test_flatten_ok() {
- use map::Map;
-
- let mapped: Vec<_> = vec![Ok(1), Ok(2), Err(2), Err(0), Ok(2)]
- .into_iter()
- .map_ok(|i| (0..i))
- .map_err(|i| 0..(i * 2))
- .flatten_ok()
- .flatten_err()
- .collect();
-
- assert_eq!(
- mapped,
- [
- Ok(0),
- Ok(0),
- Ok(1),
- Err(0),
- Err(1),
- Err(2),
- Err(3),
- Ok(0),
- Ok(1)
- ]
- );
-}