Crates.io | genawaiter |
lib.rs | genawaiter |
version | 0.99.1 |
source | src |
created_at | 2019-11-03 18:34:44.632646 |
updated_at | 2020-03-09 00:16:54.571844 |
description | Stackless generators on stable Rust. |
homepage | |
repository | https://github.com/whatisaphone/genawaiter |
max_upload_size | |
id | 177782 |
size | 96,041 |
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:
Stream
s)default-features = false
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
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 odd_numbers_less_than_ten = Gen::new(|co| async move {
let mut n = 1;
while n < 10 {
co.yield_(n).await;
n += 2;
}
});