pub trait IterInnerOkOrElse<T, E, F>where
    T: Sized,
    E: Sized,
    Self: Iterator<Item = Result<Option<T>, E>> + Sized,
    F: Fn() -> E,{
    // Required method
    fn map_inner_ok_or_else(self, f: F) -> IterInnerOkOrElseImpl<Self, T, E, F> ;
}
Expand description

Extension trait for doing Iterator<Item = Result<Option<T>, E>> -> Iterator<Item = Result<T, E>>

Required Methods§

source

fn map_inner_ok_or_else(self, f: F) -> IterInnerOkOrElseImpl<Self, T, E, F>

Map option inside an ok result, fail with the else-value if None

use resiter::ok_or_else::IterInnerOkOrElse;

let v: Vec<Result<Option<i32>, &'static str>> = vec![
    Ok(Some(1)),
    Err("untouched err"),
    Ok(None),
    Ok(Some(4))];

let res: Vec<Result<i32, &'static str>> = v.into_iter()
    .map_inner_ok_or_else(|| "error message")
    .collect();

assert_eq!(
    res,
    vec![
       Ok(1),
       Err("untouched err"),
       Err("error message"),
       Ok(4)])

Implementors§

source§

impl<I, T, E, F> IterInnerOkOrElse<T, E, F> for Iwhere I: Iterator<Item = Result<Option<T>, E>> + Sized, T: Sized, E: Sized, F: Fn() -> E,