#first #ok #items #bounded #async #set

first-ok

这提供了一个函数 first_ok::get_first_ok_bounded,它接受一个异步函数和一组项目。它将异步函数应用于所有项目,并返回第一个 Ok 结果。

3 个版本

0.1.2 2023年6月8日
0.1.1 2023年5月9日
0.1.0 2023年5月9日

#26 in #ok

MIT 许可证

15KB
85 行代码(不包括注释)

first-ok

这提供了一个函数 first_ok::get_first_ok_bounded,它接受一个异步函数和一组项目。它将异步函数应用于所有项目,并返回第一个 Ok 结果。

// examples/port.rs
use anyhow::{anyhow, Context};

#[tokio::main]
fn main() -> anyhow::Result<()> {
    let client = reqwest::Client::builder().build()?;
    let items = (1024..=65535u16).map(move |elem| (elem, client.clone()));
    let url = first_ok::get_first_ok_bounded(items, 0, move |(port, client)| async move {
        let url = format!("http://127.0.0.1:{}", port);
        let response = client.get(&url).send().await?;
        if response.status().as_u16() != 200 {
            return Err(anyhow!(format!("{}", response.status())));
        }
        Ok(url)
    })
    .await
    .context("nothing reported")??;
    println!("{}", url);
    Ok(())
}

依赖项

~3–5MB
~84K SLoC