genawaiter
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:
- safe
- allocation-free
- supports resume arguments
- no dependencies
Example:
let generator = Gen::new(|co| async move {
let mut n = 1;
while n < 10 {
// Suspend a function at any point with a value.
co.yield_(n).await;
n += 2;
}
});
// Generators can be used as ordinary iterators.
for num in generator {
println!("{}", num);
}Result:
1
3
5
7
9
Development
Install prerequisites
Install the pre-commit hook
pre-commit installThis installs a Git hook that runs a quick sanity check before every commit.
Run the app
cargo runRun the tests
cargo test