#sync #async #macro #function #retry #lib #composition

进程宏 function-compose-proc-macros

库允许组合同步和异步Rust函数

3个不稳定版本

新版本 0.2.0 2024年8月22日
0.1.1 2024年6月27日
0.1.0 2024年6月27日

进程宏中排名1792

每月下载量21
function-compose中使用

MIT授权MIT

20KB
368 代码行

可组合宏使用

同步函数
#[composeable()]
pub fn add_10(a: i32) -> Result<i32, String> {
    Ok(a + 10)
}

异步函数

异步函数应返回BoxFuture。

#[composeable()]
pub fn add_async(a: i32, b: i32) -> BoxFuture<'static, Result<i32, String>> {
    async move {
        let r = a + b;
        Ok(r)
    }.boxed()
}

Fn Composer中的重试

可组合宏支持在函数返回错误时在指定间隔内重试函数。这在尝试进行数据库调用或连接到网络端点时可能很有用。在继续重试功能之前,请确保已安装https://docs.rs/retry/latest/retry/

重试机制作为可组合进程宏的一部分实现。以下是将add_10函数配置为在初始失败后重试2次的示例。

use retry::delay::*;
#[composeable(retry = Fixed::from_millis(100).take(2))]
pub fn add_10(a: i32) -> Result<i32, String> {
    Ok(a + 10)
}

重试可以应用于同步和异步函数。

对于异步函数,函数的所有参数必须是共享引用或独占引用。

以下是具有重试的异步函数示例。

#[composeable(retry = Fixed::from_millis(100))]
pub fn add_3_arg_ref__non_copy_async<'a>(
    a: &'a mut Vec<String>,
    b: &'a mut Vec<String>,
    c: &'a Vec<String>,
) -> BoxFuture<'a, Result<i32, String>> {
    async move {
        let r = a.len() + b.len() + c.len();
        Ok(r as i32)
    }
    .boxed()
}

除了固定持续时间重试之外,还可以配置指数延迟。有关所有可用延迟选项,请参阅重试文档https://docs.rs/retry/latest/retry/all.html

依赖项

~3–5MB
~84K SLoC