Trait IterInnerOkOrElse

Source
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)])

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

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