pub(crate) type Generator = Gen<VMRequest, VMResponse, Pin<Box<dyn Future<Output = Result<Value, ErrorKind>>>>>;
Aliased Type§
struct Generator { /* private fields */ }
Implementations
Source§impl<Y, R, F> Gen<Y, R, F>where
F: Future,
impl<Y, R, F> Gen<Y, R, F>where
F: Future,
Sourcepub fn new(producer: impl FnOnce(Co<Airlock<Y, R>>) -> F) -> Gen<Y, R, F>
pub fn new(producer: impl FnOnce(Co<Airlock<Y, R>>) -> F) -> Gen<Y, R, F>
Creates a new generator from a function.
The function accepts a Co
object, and returns a future. Every time
the generator is resumed, the future is polled. Each time the future is
polled, it should do one of two things:
- Call
co.yield_()
, and then returnPoll::Pending
. - Drop the
Co
, and then returnPoll::Ready
.
Typically this exchange will happen in the context of an async fn
.
Sourcepub fn resume_with(
&mut self,
arg: R,
) -> GeneratorState<Y, <F as Future>::Output>
pub fn resume_with( &mut self, arg: R, ) -> GeneratorState<Y, <F as Future>::Output>
Resumes execution of the generator.
arg
is the resume argument. If the generator was previously paused by
awaiting a future returned from co.yield()
, that future will complete,
and return arg
.
If the generator yields a value, Yielded
is returned. Otherwise,
Completed
is returned.