Struct genawaiter::sync::Gen

source ·
pub struct Gen<Y, R, F: Future> { /* private fields */ }
Expand description

This is a generator which can be shared between threads.

See the module-level docs for examples.

Implementations§

source§

impl<Y, R, C> Gen<Y, R, Pin<Box<dyn Future<Output = C> + Send>>>

source

pub fn new_boxed<F>(producer: impl FnOnce(Co<Y, R>) -> F) -> Self
where F: Future<Output = C> + Send + 'static,

Creates a new generator with a boxed future, so it can be stored in a static.

This works exactly the same as Gen::new with an immediately boxed future.

This method exists solely to help the compiler with type inference. These two lines are equivalent, except that the compiler cannot infer the correct type on the second line:

let _: GenBoxed<i32> = Gen::new_boxed(|co| producer(co));
let _: GenBoxed<i32> = Gen::new(|co| Box::pin(producer(co)));
source§

impl<Y, R, F: Future> Gen<Y, R, F>

source

pub fn new(producer: impl FnOnce(Co<Y, R>) -> F) -> Self

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 return Poll::Pending.
  • Drop the Co, and then return Poll::Ready.

Typically this exchange will happen in the context of an async fn.

See the module-level docs for examples.

source

pub fn resume_with(&mut self, arg: R) -> GeneratorState<Y, F::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.

See the module-level docs for examples.

source§

impl<Y, F: Future> Gen<Y, (), F>

source

pub fn resume(&mut self) -> GeneratorState<Y, F::Output>

Resumes execution of the generator.

If the generator yields a value, Yielded is returned. Otherwise, Completed is returned.

See the module-level docs for examples.

source

pub fn async_resume( &mut self, ) -> impl Future<Output = GeneratorState<Y, F::Output>> + '_

Resumes execution of the generator.

If the generator pauses without yielding, Poll::Pending is returned. If the generator yields a value, Poll::Ready(Yielded) is returned. Otherwise, Poll::Ready(Completed) is returned.

See the module-level docs for examples.

Trait Implementations§

source§

impl<Y, R, F: Future> Coroutine for Gen<Y, R, F>

§

type Yield = Y

The type of value this generator yields.
§

type Resume = R

The type of value this generator accepts as a resume argument.
§

type Return = <F as Future>::Output

The type of value this generator returns upon completion.
source§

fn resume_with( self: Pin<&mut Self>, arg: R, ) -> GeneratorState<Self::Yield, Self::Return>

Resumes the execution of this generator. Read more
source§

impl<Y, F: Future<Output = ()>> IntoIterator for Gen<Y, (), F>

§

type Item = Y

The type of the elements being iterated over.
§

type IntoIter = IntoIter<Y, F>

Which kind of iterator are we turning this into?
source§

fn into_iter(self) -> Self::IntoIter

Creates an iterator from a value. Read more

Auto Trait Implementations§

§

impl<Y, R, F> Freeze for Gen<Y, R, F>

§

impl<Y, R, F> RefUnwindSafe for Gen<Y, R, F>
where F: RefUnwindSafe,

§

impl<Y, R, F> Send for Gen<Y, R, F>
where F: Send, Y: Send, R: Send,

§

impl<Y, R, F> Sync for Gen<Y, R, F>
where F: Sync, Y: Send, R: Send,

§

impl<Y, R, F> Unpin for Gen<Y, R, F>

§

impl<Y, R, F> UnwindSafe for Gen<Y, R, F>
where F: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<C> Generator for C
where C: Coroutine<Resume = ()>,

§

type Yield = <C as Coroutine>::Yield

The type of value this generator yields.
§

type Return = <C as Coroutine>::Return

The type of value this generator returns upon completion.
source§

fn resume( self: Pin<&mut C>, ) -> GeneratorState<<C as Generator>::Yield, <C as Generator>::Return>

Resumes the execution of this generator.
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.