whatisaphone
genawaiter
Rust

Stackless generators on stable Rust.

Last updated May 21, 2026
484
Stars
33
Forks
20
Issues
0
Stars/day
Attention Score
29
Language breakdown
Rust 100.0%
โ–ธ Files click to expand
README

genawaiter

[![crate-badge]][crate-link] [![docs-badge]][docs-link] [![ci-badge]][ci-link]

[crate-badge]: https://img.shields.io/crates/v/genawaiter.svg [crate-link]: https://crates.io/crates/genawaiter [docs-badge]: https://docs.rs/genawaiter/badge.svg [docs-link]: https://docs.rs/genawaiter [ci-badge]: https://github.com/whatisaphone/genawaiter/workflows/CI/badge.svg [ci-link]: https://github.com/whatisaphone/genawaiter/actions

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

[yield-unstable]: https://doc.rust-lang.org/nightly/unstable-book/language-features/generators.html

Features:

  • supports resume arguments and completion values
  • supports async generators (e.g., Streams)
  • allocation-free
  • no runtime dependencies
- no compile-time dependencies either, with default-features = false
  • built on top of standard language constructs, which means there are no platform-specific shenanigans
Example:
let oddnumberslessthanten = 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 oddnumberslessthanten { println!("{}", num); }

Result:

1
3
5
7
9

And here is the same generator, this time without macros. This is how you do things with default-features = false (which eliminates the proc macro dependencies).

let oddnumberslessthanten = Gen::new(|co| async move {
    let mut n = 1;
    while n < 10 {
        co.yield_(n).await;
        n += 2;
    }
});

See the docs for more.

Development

Install prerequisites

  • [Rust]
  • [pre-commit]
[Rust]: https://www.rust-lang.org/ [pre-commit]: https://pre-commit.com/

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
๐Ÿ”— More in this category

ยฉ 2026 GitRepoTrend ยท whatisaphone/genawaiter ยท Updated daily from GitHub