4 个版本
使用旧的 Rust 2015
0.1.3 | 2017 年 7 月 4 日 |
---|---|
0.1.2 | 2017 年 7 月 4 日 |
0.1.1 | 2017 年 7 月 4 日 |
0.1.0 | 2017 年 7 月 4 日 |
#85 在 #error-handling
6KB
116 行
此库实现了 Saga 系统的部分功能,用于执行和回滚连续步骤。
此安装的基本概念是每个 Saga 由多个 Adventure 组成。每个 Adventure 都有一个前进和后退步骤。
当前进步骤返回失败时,该失败状态将传递到当前及其所有之前的后退步骤
// f1 -> f2 -> f3
// | error
// v
// b1 <- b2 <- b3
Saga 的一个简单示例如下
use aud::Adventure;
use aud::Failure;
use aud::Saga;
use std::error::Error;
use std::fmt;
#[derive(Debug)]
pub struct StupidError {
stupid: bool,
}
impl Error for StupidError {
fn description(&self) -> &str {
"stupid error"
}
}
impl fmt::Display for StupidError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "is stupid: {}", self.stupid)
}
}
fn inc2(i: i32) -> Result<i32, Failure<i32>> {
Ok(i + 1)
}
fn dec(i: i32) -> i32 {
i - 1
}
fn main() {
let saga = Saga::new(vec![
Adventure::new(inc2,dec),
Adventure::new(inc2,dec),
]);
match saga.tell(0) {
Ok(res) => assert!(res == 2),
Err(_) => unimplemented!(),
}
}