#state-machine #state #fsm

无std sm_macro

💋 SM – 一个静态状态机宏

3个版本 (重大变更)

0.9.0 2019年11月9日
0.7.0 2018年10月4日
0.6.1 2018年9月18日

#36 in #fsm

Download history 11543/week @ 2024-03-31 11975/week @ 2024-04-07 11873/week @ 2024-04-14 13950/week @ 2024-04-21 12613/week @ 2024-04-28 13964/week @ 2024-05-05 14418/week @ 2024-05-12 14614/week @ 2024-05-19 16943/week @ 2024-05-26 16713/week @ 2024-06-02 15303/week @ 2024-06-09 20551/week @ 2024-06-16 15629/week @ 2024-06-23 15221/week @ 2024-06-30 15924/week @ 2024-07-07 12658/week @ 2024-07-14

60,057 每月下载量
sm 中使用

MIT/Apache

53KB
1.5K SLoC

SM旨在成为一个安全快速简单的状态机库。

  • 安全 — Rust的类型系统、所有权模型和详尽的模式匹配可以防止你误用你的状态机

  • 快速 — 零运行时开销,机器是100%静态的,所有验证都在编译时发生

  • 简单 — 五个特质,以及一个可选的声明式宏,仅控制流,不附加业务逻辑


你可能正在寻找

快速示例

extern crate sm;
use sm::sm;

sm! {
    Lock {
        InitialStates { Locked }

        TurnKey {
            Locked => Unlocked
            Unlocked => Locked
        }

        Break {
            Locked, Unlocked => Broken
        }
    }
}

fn main() {
    use Lock::*;
    let lock = Machine::new(Locked);
    let lock = lock.transition(TurnKey);

    assert_eq!(lock.state(), Unlocked);
    assert_eq!(lock.trigger().unwrap(), TurnKey);
}

依赖项

~2MB
~46K SLoC