3 个不稳定版本
0.2.0 | 2024年6月9日 |
---|---|
0.1.1 | 2024年3月12日 |
0.1.0 | 2024年3月11日 |
#599 in 网络编程
165KB
4K SLoC
asl
此库提供了 Amazon States Language (ASL) 在 Rust 中的实现。
该库可以解析和执行在 ASL 中定义的状态机。
示例:Hello world
此示例将打印字符串 Hello
和 World
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();
}
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