8个版本 (破坏性更新)

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

#26 in #fsm

Download history · Rust 包仓库 11650/week @ 2024-04-01 · Rust 包仓库 11738/week @ 2024-04-08 · Rust 包仓库 11951/week @ 2024-04-15 · Rust 包仓库 13947/week @ 2024-04-22 · Rust 包仓库 12644/week @ 2024-04-29 · Rust 包仓库 13969/week @ 2024-05-06 · Rust 包仓库 14429/week @ 2024-05-13 · Rust 包仓库 14607/week @ 2024-05-20 · Rust 包仓库 16932/week @ 2024-05-27 · Rust 包仓库 16701/week @ 2024-06-03 · Rust 包仓库 15356/week @ 2024-06-10 · Rust 包仓库 20545/week @ 2024-06-17 · Rust 包仓库 15638/week @ 2024-06-24 · Rust 包仓库 15259/week @ 2024-07-01 · Rust 包仓库 15893/week @ 2024-07-08 · Rust 包仓库 12962/week @ 2024-07-15 · Rust 包仓库

60,310 每月下载量
3 个crate中使用 (2直接使用)

MIT/Apache

24KB
85

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);
}

依赖关系

~0–285KB