#generator #yield #coroutine #async #await

genawaiter-macro

Convenience macros for generators (genawaiter)

2 releases

0.99.1 Mar 9, 2020
0.99.0 Feb 16, 2020

#399 in Asynchronous

Download history 412/week @ 2020-11-07 274/week @ 2020-11-14 363/week @ 2020-11-21 386/week @ 2020-11-28 396/week @ 2020-12-05 462/week @ 2020-12-12 348/week @ 2020-12-19 223/week @ 2020-12-26 418/week @ 2021-01-02 457/week @ 2021-01-09 520/week @ 2021-01-16 592/week @ 2021-01-23 623/week @ 2021-01-30 477/week @ 2021-02-06 606/week @ 2021-02-13 610/week @ 2021-02-20

3,163 downloads per month
Used in 12 crates (via genawaiter)

MIT/Apache

3KB

genawaiter

crate-badge docs-badge ci-badge

This crate implements stackless generators (aka coroutines) in stable Rust. Instead of using yield, which won't be stabilized anytime soon, you use async/await, which is stable today.

Features:

  • supports resume arguments and completion values
  • allocation-free
  • no runtime dependencies
    • no compile-time dependencies either, with default-features = []
  • built on top of standard language constructs, which means there are no platform-specific shenanigans

Example:

let odd_numbers_less_than_ten = gen!({
    let mut n = 1;
    while n < 10 {
        yield_!(n); // Suspend a function at any point with a value.
        n += 2;
    }
});

// Generators can be used as ordinary iterators.
for num in odd_numbers_less_than_ten {
    println!("{}", num);
}

Result:

1
3
5
7
9

See the docs for more.

Development

Install prerequisites

Install the pre-commit hook

pre-commit install

This installs a Git hook that runs a quick sanity check before every commit.

Run the app

cargo run

Run the tests

cargo test

No runtime deps

Features

  • proc_macro
  • strict