gen-iter icon indicating copy to clipboard operation
gen-iter copied to clipboard

add struct `GenIterReturn` and macro `gen_iter_return!` to iterate over a generator and get the return value

Open viruscamp opened this issue 2 years ago • 3 comments

add struct GenIterReturn and macro gen_iter_return! to iterate over a generator and get the return value

[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.

Differences with GenIter<G>:

  1. able to get return value of a generator
  2. safe to call next() after generator is done without panic
  3. maybe less efficient than GenIter<G>

[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"

viruscamp avatar Mar 23 '22 09:03 viruscamp

can you add a changelog entry? ill push a new release soon

tinaun avatar Mar 23 '22 11:03 tinaun

  • made the crate no_std compatible by adding #![no_std]
  • added struct GenIterReturn and macro gen_iter_return! to iterate over a generator and get the return value

viruscamp avatar Mar 23 '22 13:03 viruscamp

thanks!

tinaun avatar Mar 23 '22 13:03 tinaun

Any update on this? It would be nice to have this :)

Boscop avatar Jan 03 '23 21:01 Boscop

forgot to actually merge this nine months ago

*crawls back into my hole*

tinaun avatar Jan 03 '23 22:01 tinaun