diff options
author | bors[bot] <26634292+bors[bot]@users.noreply.github.com> | 2023-04-12 07:16:00 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-04-12 07:16:00 +0000 |
commit | 42cd8288976b30c404d35d4bcdc595d029a9ea1c (patch) | |
tree | 4f28d95d5749bc3982f0f8a315a723176303322e | |
parent | 39cfab42b852bce94132913a2a8c1944fa92aa12 (diff) | |
parent | 3e6f618d7875e7a5eeb49a2fbea5eeee098fcb97 (diff) |
Merge #24
24: Document flatten r=matthiasbeyer a=johlrogge
Co-authored-by: Joakim Ohlrogge <joakim.ohlrogge@gmail.com>
-rw-r--r-- | src/flatten.rs | 72 |
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) - ] - ); -} |