1个不稳定版本

0.1.0-alpha2023年2月25日

#26 in #转换

MIT 协议

28KB
598

restate

ci-badge Latest Version docs-badge

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文件。

无运行时依赖