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§
Sourcefn chain_if_with<F, C>(self, cond: bool, fun: F) -> ChainIf<Self, C> ⓘ
fn chain_if_with<F, C>(self, cond: bool, fun: F) -> ChainIf<Self, C> ⓘ
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);Sourcefn 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>,
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§
Sourcefn chain_if<C>(self, cond: bool, iter: C) -> ChainIf<Self, C> ⓘwhere
C: IntoIterator<Item = Self::Item>,
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);Sourcefn chain_if_else<I, E>(
self,
cond: bool,
iter_if: I,
iter_else: E,
) -> ChainIfElse<Self, I, E> ⓘ
fn chain_if_else<I, E>( self, cond: bool, iter_if: I, iter_else: E, ) -> ChainIfElse<Self, I, E> ⓘ
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.