macro_rules! gen_iter_return {
    ($block: block) => { ... };
    (move $block: block) => { ... };
}
Expand description

macro to simplify iterator - via - generator with return value construction

#![feature(generators)]

use gen_iter::gen_iter_return;

let mut g = gen_iter_return!({
    yield 1;
    yield 2;
    return "done";
});

assert_eq!((&mut g).collect::<Vec<_>>(), [1, 2]); // use `&mut g` as an iterator
assert_eq!(g.is_done(), true); // check whether generator is done
assert_eq!((&mut g).next(), None); // safe to call `next()` after done
assert_eq!(g.return_or_self().ok(), Some("done")); // get return value of generator