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

BSD-3-Clause

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!(),
        }
    }

无运行时依赖