#generator #yield #async #await #rust-generator #n1 #n3

rust_generator

A simple generator base on async rust! No experimental needed!

3 releases

new 0.1.2 Apr 15, 2025
0.1.1 Apr 14, 2025
0.1.0 Apr 14, 2025

#567 in Asynchronous

Download history 258/week @ 2025-04-11

258 downloads per month

Custom license

10KB
195 lines

Rust Generator

A simple generator base on async rust! No experimental needed!

Example

Code use rust_generator:

#[rust_generator::generator]
fn fib() -> impl Iterator<Item = usize> {
    let mut n1 = 1;
    let mut n2 = 1;
    let mut n3 = 2;
    // note: there is no need to import yield_,
    // because yield_ is just act like an attribute and
    // will be replaced when rust_generator::generator is expanded.
    yield_!(n1);
    // `xxx.await` is also an alternative.
    n2.await;
    loop {
        yield_!(n3);
        n1 = n2;
        n2 = n3;
        n3 = n1 + n2;
    }
}

fn main() {
    for x in fib().take(10) {
        println!("{x}");
    }
}

Code use experimental rust:

fn fib() -> impl Iterator<Item = usize> {
    gen {
        let mut n1 = 1;
        let mut n2 = 1;
        let mut n3 = 2;
        yield n1;
        yield n2;
        loop {
            yield n3;
            n1 = n2;
            n2 = n3;
            n3 = n1 + n2;
        }
    }
}

Dependencies

~2.2–3.5MB
~68K SLoC