Expand description
gen_iter - create generators to use as iterators
GenIter and gen_iter!
GenIter converts a Generator<(), Return=()> into an iterator over the
yielded type of the generator. The return type of the generator needs to be ().
gen_iter! helps to create a GenIter
#![feature(generators)]
use gen_iter::gen_iter;
fn fibonacci() -> impl Iterator<Item = u64> {
gen_iter!({
let mut a = 0;
let mut b = 1;
loop {
let c = a + b;
a = b;
b = c;
yield a;
}
})
}
for elem in fibonacci().map(|x| 2 * x).take(10) {
println!("{}", elem);
}GenIterReturn and gen_iter_return!
GenIterReturn can be converted from a Generator<()>,
&mut GenIterReturn<G> can be used as iterator.
The return value of the generator can be got after the iterator is exhausted.
gen_iter_return! helps to create a GenIterReturn.
#![feature(generators)]
use gen_iter::gen_iter_return;
let mut g = gen_iter_return!({
yield 1;
yield 2;
return "done";
});
for y in &mut g {
println!("yield {}", y);
}
println!("generator is_done={}", g.is_done()); // true
println!("generator returns {}", g.return_or_self().ok().unwrap()); // "done"Macros
macro to simplify iterator - via - generator construction
macro to simplify iterator - via - generator with return value construction
Structs
an iterator that holds an internal generator representing
the iteration state
GenIterReturn<G> holds a generator G or the return value of G,
&mut GenIterReturn<G> acts as an iterator.