Streams

Streams are the asynchronous version of Generators.

They have almost identical next and resume functions, but each must be used with .await, and we are now allowed to use asynchronous functions inside of the generator.

async fn send_requests(list) {
    let client = http::Client::new();

    let do_request = async |url| {
        Ok(client.get(url).send().await?.status())
    };

    for url in list {
        yield do_request(url).await;
    }
}

let requests = send_requests(["https://google.com", "https://amazon.com"]);

while let Some(status) = requests.next().await.transpose()? {
    println!("{}", status);
}
$> cargo run -- run scripts/book/streams/basic_stream.rn
200 OK
200 OK