IntoIteratorExt

Trait IntoIteratorExt 

Source
pub trait IntoIteratorExt: IntoIterator + Sized {
    // Required methods
    fn chain_if_with<F, C>(self, cond: bool, fun: F) -> ChainIf<Self, C> 
       where F: FnOnce() -> C,
             C: IntoIterator<Item = Self::Item>;
    fn chain_if_else_with<FI, I, FE, E>(
        self,
        cond: bool,
        fun_if: FI,
        fun_else: FE,
    ) -> ChainIfElse<Self, I, E> 
       where FI: FnOnce() -> I,
             I: IntoIterator<Item = Self::Item>,
             FE: FnOnce() -> E,
             E: IntoIterator<Item = Self::Item>;

    // Provided methods
    fn chain_if<C>(self, cond: bool, iter: C) -> ChainIf<Self, C> 
       where C: IntoIterator<Item = Self::Item> { ... }
    fn chain_if_else<I, E>(
        self,
        cond: bool,
        iter_if: I,
        iter_else: E,
    ) -> ChainIfElse<Self, I, E> 
       where I: IntoIterator<Item = Self::Item>,
             E: IntoIterator<Item = Self::Item> { ... }
}
Expand description

Extensions to IntoIterator that allow for conditionally chaining other IntoIterator’s.

Required Methods§

Source

fn chain_if_with<F, C>(self, cond: bool, fun: F) -> ChainIf<Self, C>
where F: FnOnce() -> C, C: IntoIterator<Item = Self::Item>,

Conditionally chains a given iterator.

Like IteratorExt::chain_if, but instead accept functions that return the iterator.

§Example
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];

let new_vec = vec1.chain_if_with(true, || vec2).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 4, 5, 6], new_vec);
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];

let new_vec = vec1.chain_if_with(false, || vec2).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3], new_vec);
Source

fn chain_if_else_with<FI, I, FE, E>( self, cond: bool, fun_if: FI, fun_else: FE, ) -> ChainIfElse<Self, I, E>
where FI: FnOnce() -> I, I: IntoIterator<Item = Self::Item>, FE: FnOnce() -> E, E: IntoIterator<Item = Self::Item>,

Conditionally chains a given iterator falling back on another.

Like IteratorExt::chain_if_else, but instead accept functions that return the iterator.

§Example
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let vec3 = vec![7, 8, 9];

let new_vec = vec1.chain_if_else_with(true, || vec2, || vec3).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 4, 5, 6], new_vec);
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let vec3 = vec![7, 8, 9];

let new_vec = vec1.chain_if_else_with(false, || vec2, || vec3).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 7, 8, 9], new_vec);

Provided Methods§

Source

fn chain_if<C>(self, cond: bool, iter: C) -> ChainIf<Self, C>
where C: IntoIterator<Item = Self::Item>,

Conditionally chains a given iterator.

§Example
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];

let new_vec = vec1.chain_if(true, vec2).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 4, 5, 6], new_vec);
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];

let new_vec = vec1.chain_if(false, vec2).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3], new_vec);
Source

fn chain_if_else<I, E>( self, cond: bool, iter_if: I, iter_else: E, ) -> ChainIfElse<Self, I, E>
where I: IntoIterator<Item = Self::Item>, E: IntoIterator<Item = Self::Item>,

Conditionally chains a given iterator falling back on another.

§Example
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let vec3 = vec![7, 8, 9];

let new_vec = vec1.chain_if_else(true, vec2, vec3).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 4, 5, 6], new_vec);
use fenn::iter::IntoIteratorExt;

let vec1 = vec![1, 2, 3];
let vec2 = vec![4, 5, 6];
let vec3 = vec![7, 8, 9];

let new_vec = vec1.chain_if_else(false, vec2, vec3).collect::<Vec<_>>();

assert_eq!(vec![1, 2, 3, 7, 8, 9], new_vec);

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<T> IntoIteratorExt for T
where T: IntoIterator + Sized,