Expand description
§Dedenne
Cute little generators!
Dedenne implements generators, a la the unstable language feature, over async/await in completely stable Rust.
§Simple Usage
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.ield
s, 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.
§Prior Art
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).- Unstable lang feature. Doesn’t support passing values in to a generator, afaict. Also requires nightly rust and has been bikeshedding for 6 years as of time of writing.
Re-exports§
pub use wrapper::Generator;
Modules§
- iter
- wrapper
- Defines the convenience
Generator
wrapper. Just makes you need less horrible tuple destructuring.
Structs§
- Started
Generator - Wraps an async function into something that can be used as a generator.
- Yield
Wrapper - The type of
y
iny.ield(foo)
.
Enums§
- Generator
Response - The result of querying a generator.
Either it will
Y
ield a value, or be done and return aR
esponse.