3 个不稳定版本

0.2.0 2024年6月9日
0.1.1 2024年3月12日
0.1.0 2024年3月11日

#599 in 网络编程

MIT 许可证

165KB
4K SLoC

asl

crates.io docs.rs build status

此库提供了 Amazon States Language (ASL) 在 Rust 中的实现。

该库可以解析和执行在 ASL 中定义的状态机。

示例:Hello world

此示例将打印字符串 HelloWorld

struct TaskHandler {}
impl StateExecutionHandler for TaskHandler {
    type TaskExecutionError = String;

    fn execute_task(
        &self,
        resource: &str,
        input: &Value,
        credentials: Option<&Value>,
    ) -> Result<Option<Value>, Self::TaskExecutionError> {
        let result = match resource {
            "SayHello" => "Hello",
            "SayWorld" => "World",
            _ => Err("Unknown resource!")?,
        };
        println!("{}", result);
        Ok(None) // We opt into returning nothing
    }
}

fn main() {
    let definition = r#"{
          "Comment": "A simple minimal example of the States language",
          "StartAt": "State: Hello",
          "States": {
            "State: Hello": {
              "Type": "Task",
              "Resource": "SayHello",
              "Next": "State: World"
            },
            "State: World": {
              "Type": "Task",
              "Resource": "SayWorld",
              "End": true
            }
          }
        }"#;
    let state_machine = StateMachine::parse(definition).unwrap();
    let input = Value::Null;
    let execution: Execution<TaskHandler, EmptyContext> = state_machine.start(&input, TaskHandler {}, EmptyContext {});
    // the Execution type implements Iterator, so we can iterate until there are no more states to execute
    let steps: Vec<StateExecutionOutput> = execution.collect();
}

参见:test_hello_world.rs

Amazon States Language (ASL)

Amazon States Language 是一种基于 JSON 的结构化语言,用于定义您的状态机,它是一系列可以进行工作(任务状态)、确定下一个要过渡到的状态(选择状态)、使用错误停止执行(失败状态)等等的状态。

有关 ASL 的完整定义,请参阅 Amazon States Language 规范

重要:此项目与 Amazon 没有任何关联。

ASL 与 AWS Step Functions 深度相关。这意味着在许多地方,语言规范中的定义没有指定,因此此库选择遵循 AWS Step Functions 的结果。

特性矩阵

以下表格列出了已实现或缺失的主要特性

特性 状态
状态执行工作流 已实现
JSON 路径和引用路径 已实现
状态:通过 已实现
状态:等待 已实现
状态:失败 已实现
状态:选择 已实现
状态:成功 已实现
状态:任务 已实现,但并非所有功能。请参阅此表中的其他功能。
状态:任务 - 超时 未实现 (https://github.com/edisongustavo/asl-rust/issues/9)
状态:任务 - 心跳 未实现 (https://github.com/edisongustavo/asl-rust/issues/10)
状态:任务 - 重试 未实现 (https://github.com/edisongustavo/asl-rust/issues/11)
状态:并行 未实现 (https://github.com/edisongustavo/asl-rust/issues/2)
状态:映射 未实现 (https://github.com/edisongustavo/asl-rust/issues/1)
内置函数 未实现 (https://github.com/edisongustavo/asl-rust/issues/4)

许可证

本项目采用MIT许可证。

依赖项

~9.5MB
~177K SLoC