1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
use std::pin::Pin; /// A trait implemented for generator types. /// /// This is modeled after the stdlib's nightly-only [`std::ops::Generator`]. pub trait Generator { /// The type of value this generator yields. type Yield; /// The type of value this generator returns. type Return; /// Resumes the execution of this generator. fn resume(self: Pin<&mut Self>) -> GeneratorState<Self::Yield, Self::Return>; } /// The result of a generator resumption. /// /// This is modeled after the stdlib's nightly-only /// [`std::ops::GeneratorState`]. #[derive(PartialEq, Debug)] #[allow(clippy::module_name_repetitions)] pub enum GeneratorState<Y, R> { /// The generator suspended with a value. Yielded(Y), /// The generator completed with a return value. Complete(R), }