Trait resiter::flatten::Flatten

source ·
pub trait Flatten<O, E>: Sized {
    // Required methods
    fn flatten_ok<U, O2>(self) -> FlattenOk<Self, U> 
       where U: IntoIterator<Item = O2>;
    fn flatten_err<U, E2>(self) -> FlattenErr<Self, U> 
       where U: IntoIterator<Item = E2>;
}
Expand description

Extension trait for Iterator<Item = Result<O, E>> to selectively transform Oks and Errors.

Required Methods§

source

fn flatten_ok<U, O2>(self) -> FlattenOk<Self, U> where U: IntoIterator<Item = O2>,

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)]
);
source

fn flatten_err<U, E2>(self) -> FlattenErr<Self, U> where U: IntoIterator<Item = E2>,

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),
    ]
);

Implementors§

source§

impl<I, O, E> Flatten<O, E> for Iwhere I: Iterator<Item = Result<O, E>> + Sized,