#链式 #定时 #错误 #操作 #定时 #一起 #动作

bin+lib chain_reaction

简单的美丽定时函数链式化

4 个版本

0.2.50 2024 年 8 月 26 日
0.2.49 2024 年 8 月 26 日
0.2.48 2024 年 8 月 26 日
0.2.46 2024 年 8 月 26 日

#2#一起

MIT 许可证

23KB
404

链式反应

let increment = |x| Ok(x + 1);
let double = |x| Ok(x * 2);
let stringify = |x| Ok(x.to_string());

let result = TimedReactor::input(5)
    .then(increment)
    .then(double)
    .then(stringify)
    .run();

println!("{:?}", result); // Output: Ok("12")

欢迎来到 链式反应 —— 一个强大的 Rust crate,旨在通过提供无缝的操作链式化和内置的错误处理以及精确的计时来简化复杂的数据处理管道、工作流和实时系统。


概述

链式反应 允许您组合操作序列(或“动作”),这些操作可以链式连接以形成复杂的工作流。每个操作都可以优雅地处理错误,并且每个操作的计时都会自动跟踪并记录,从而实现详细的分析。

主要功能

  • 无缝链式化:轻松将多个操作链式连接,一个操作的输出直接进入下一个操作。
  • 错误处理:内置的错误处理确保在整个链中优雅地管理错误。
  • 计时机制:自动跟踪链中每个操作的持续时间,使性能分析变得简单。
  • 灵活使用:适用于各种应用,包括数据处理、业务工作流、自动化测试和实时系统。

入门

安装

将 ChainReaction 添加到您的 Cargo.toml

[dependencies]
chain_reaction = "0.1.0"

基本使用

以下是您如何开始使用 ChainReaction 的示例

use chain_reaction::{TimedReactor, Failure};

let increment = |x| Ok(x + 1);
let double = |x| Ok(x * 2);
let stringify = |x| Ok(x.to_string());

let result = TimedReactor::input(5)
    .then(increment)
    .then(double)
    .then(stringify)
    .run();

match result {
    Ok(value) => println!("Final result: {}", value),
    Err(e) => println!("An error occurred: {:?}", e),
}

高级使用

条件逻辑

链式反应允许您使用 if_else 方法根据条件执行不同的操作。

let (result, timings) = TimedReactor::input(4)
    .if_else(
        |x| *x % 2 == 0,
        |x| Ok(x * 2),
        |x| Ok(x + 1),
    )
    .run();

match result {
    Ok(value) => println!("Conditional result: {}", value),
    Err(e) => println!("An error occurred: {:?}", e),
}
println!("Timings: {:?}", timings);

遍历集合

您可以使用 for_each 方法处理项目集合。

let square = |x| Ok(x * x);

let (result, timings) = TimedReactor::input(vec![1, 2, 3, 4])
    .for_each(square)
    .run();

match result {
    Ok(values) => println!("Squared values: {:?}", values),
    Err(e) => println!("An error occurred: {:?}", e),
}
println!("Timings: {:?}", timings);

合并操作

链式反应支持从集合中合并操作,例如求和元素对并应用进一步的转换。

let sum = |a, b| a + b;
let square = |x| Ok(x * x);

let (result, timings) = TimedReactor::input(vec![10, 20, 30, 40])
    .merge(sum)
    .then(square)
    .run();

match result {
    Ok(value) => println!("Merge and square result: {}", value),
    Err(e) => println!("An error occurred: {:?}", e),
}
println!("Timings: {:?}", timings);

为什么选择链式反应?

链式反应结合了易用性、错误恢复、性能监控和灵活性。它通过简化复杂工作流的构建而脱颖而出,让您可以专注于业务逻辑,而无需陷入错误处理或性能问题。

无论您是构建数据处理管道、复杂业务工作流还是实时事件处理系统,链式反应 都提供了您创建高效、可维护和健壮系统所需的工具。

无运行时依赖项