| Crates.io | dedenne |
| lib.rs | dedenne |
| version | 0.1.0 |
| created_at | 2023-07-17 16:17:02.651529+00 |
| updated_at | 2023-07-17 16:17:02.651529+00 |
| description | Cute little generators using async/await in stable rust |
| homepage | |
| repository | https://github.com/gamma-delta/dedenne |
| max_upload_size | |
| id | 918651 |
| size | 33,993 |
Cute little generators!
Dedenne implements generators, a la the unstable language feature, over async/await in completely stable Rust.
use dedenne::*;
let mut generator = Generator::new(|y, init| async move {
for x in 0..init {
y.ield(x).await;
}
for x in (0..init).rev() {
y.ield(x).await;
}
"All done!"
});
assert_eq!(
generator.start(3), GeneratorResponse::Yielding(0)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(1)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(2)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(2)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(1)
);
assert_eq!(
generator.resume(), GeneratorResponse::Yielding(0)
);
assert_eq!(
generator.resume(), GeneratorResponse::Done("All done!")
);
For a larger example, check out this simple TUI interface.
panic! vs unreachable!If something in Dedenne panic!s, then it's a user error.
Make sure to await your y.ields, and don't call resume after a
generator's exhausted.
If something in Dedenne panics with an unreachable! message,
then it's a problem with Dedenne.
Please file a bug report if it does.
I am not the first person to have this idea. However, I think Dedenne is the only crate that supports mapping over iterators.
generator.
Doesn't support a starting argument,
which means you can't use it as a mapping iterator.
Is always stackful.genawaiter.
Has some convenience macros that make it nicer to make generators.
Also lets you really tune how the generators are stored
(stackful or allocating).