// run-pass #![feature(generators, generator_trait)] use std::ops::{ Generator, GeneratorState }; use std::pin::Pin; fn foo(_: &str) -> String { String::new() } fn bar(baz: String) -> impl Generator { move || { yield foo(&baz); } } fn foo2(_: &str) -> Result { Err(()) } fn bar2(baz: String) -> impl Generator { move || { if let Ok(quux) = foo2(&baz) { yield quux; } } } fn main() { assert_eq!(Pin::new(&mut bar(String::new())).resume(), GeneratorState::Yielded(String::new())); assert_eq!(Pin::new(&mut bar2(String::new())).resume(), GeneratorState::Complete(())); }