1个不稳定版本
0.1.0-alpha | 2023年2月25日 |
---|
#26 in #转换
28KB
598 行
restate
restate
是一个Rust库,提供了一种简单的方式来定义和使用有限状态机。
安装
将以下内容添加到您的 Cargo.toml 文件中
[dependencies]
restate = "0.1.0-alpha"
或者使用
cargo add restate
用法
restate 可以用来定义状态机,它可以根据事件在各个状态之间转换。以下是一个示例
use restate::blocking::*;
#[derive(Debug, Clone, PartialEq, Eq)]
struct Active;
#[derive(PartialEq, Eq)]
enum CountEvent {
Increment,
Decrement,
}
let mut sm = Machine::with_context(0)
.on_next(
Builder::self_transition(Active, CountEvent::Increment).action(
|cx: ContextMut<Active, CountEvent, i32>| {
*cx.context += 1;
},
),
)
.on_next(
Builder::self_transition(Active, CountEvent::Decrement).action(
|cx: ContextMut<Active, CountEvent, i32>| {
*cx.context -= 1;
},
),
)
.start(Active);
sm.send(CountEvent::Increment).unwrap();
sm.send(CountEvent::Increment).unwrap();
sm.send(CountEvent::Increment).unwrap();
sm.send(CountEvent::Decrement).unwrap();
assert_eq!(*sm.context(), 2);
此示例创建了一个具有单个状态Active和两个事件Increment和Decrement的状态机。然后为每个事件添加了一个自转换,该转换增加或减少机器上下文中的整数。最后,它以Active状态启动机器,向它发送一些事件,并检查上下文的最终值。
许可证
本库采用MIT许可证。有关更多详细信息,请参阅LICENSE文件。