generator-light 0.1.0

Light stackless generators based on Futures
Documentation
use std::fmt::Display;
use std::pin::pin;

use generator_light::Generator;
use generator_light::Yielder;
use generator_light::ext::GeneratorIterator;
use generator_light::ext::from_iter;
use generator_light::generator;
use generator_light::yield_;

use generator_light::ext::GeneratorExt;

use std::convert::Infallible;

fn list_printer<D: Display>(
    sep: impl Display,
) -> impl Generator<D, Yield = (), Return = Infallible> {
    generator(async move |mut yielder: Yielder<_, _>, mut item: D| {
        print!("{item}");
        loop {
            item = yield_!(yielder, ());
            print!("{sep}{item}")
        }
    })
}

fn print_list(s: impl IntoIterator<Item: Display>, sep: impl Display) {
    let g = from_iter(s).compose(list_printer(sep)).map_complete(drop);
    let g = pin!(g);
    g.into_iter().for_each(drop);
}

fn main() {
    print_list([1, 2, 3, 4, 5], ";\n");
    println!("")
}