3个版本 (重大变更)

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

#36 in #fsm

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

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