This crate provides a coroutine implementation based on Rust's async/await syntax.
use async_coroutine::{Coroutine, State};
let mut co = Coroutine::new(|handle, value| async move {
assert_eq!(value, 1);
assert_eq!(handle.yield_(true).await, 2);
assert_eq!(handle.yield_(false).await, 3);
"Bye"
});
assert_eq!(co.resume_with(1), State::Yield(true));
assert_eq!(co.resume_with(2), State::Yield(false));
assert_eq!(co.resume_with(3), State::Complete("Bye"));