Is there any other way to to implement anystate ? I'd like to have something like unwrap for when the yield and return type are the same.
#![feature(generators, generator_trait)]
extern crate core;
use core::{
ops::{Generator, GeneratorState},
pin::pin,
};
fn gen_fn() -> impl Generator<Yield = usize, Return = usize> {
static || {
let foo = "foo";
let foo_ref = &foo;
yield 0;
yield foo_ref.len();
return foo.len();
}
}
pub fn add3(a:usize, b:usize, c:usize) -> usize {
a + b + c
}
pub fn anystate<T>(gen: GeneratorState<T,T>) -> T {
match gen {
GeneratorState::Yielded(y) => y,
GeneratorState::Complete(r) => r,
}
}
pub fn bar() -> usize {
let mut gen = pin!(gen_fn());
let a = anystate(gen.as_mut().resume(()));
let b = anystate(gen.as_mut().resume(()));
let c = anystate(gen.as_mut().resume(()));
add3(a,b,c)
}
pub fn main() {
bar();
}