1个稳定版本
1.0.0 | 2023年3月26日 |
---|
#22 in #fsm
59KB
613 代码行
简单状态机
此Rust包定义了 statemachine!()
宏。该宏接受一个参数,即状态机的定义,该定义在一个简单易读的领域特定语言中进行描述。
状态机宏支持守卫、触发器的行为、状态进入和退出。事件可以携带负载,例如用于实现通信系统。
完整文档可在docs.rs上找到。
用法
将其添加到您的Cargo.toml中
[dependencies]
simple-statemachine = "1.0"
示例
此示例实现了具有用于将交通灯切换到“行走”状态的按钮的简单交通灯的人行道部分。
use std::thread;
use std::time::Duration;
use simple_statemachine::statemachine;
statemachine!{
Name TrafficLightStatemachine
InitialState DontWalk
DontWalk {
ButtonPressed ==set_button_to_pressed=> DontWalk
TimerFired[check_button_is_pressed] ==switch_to_walk=> Walk
TimerFired => DontWalk
}
Walk {
OnEntry set_button_to_not_pressed
TimerFired ==switch_to_dont_walk=> DontWalk
}
}
struct LightSwitch{
button_pressed:bool
}
impl TrafficLightStatemachineHandler for LightSwitch{
fn check_button_is_pressed(&self) -> bool {
self.button_pressed
}
fn set_button_to_pressed(&mut self) {
self.button_pressed=true;
}
fn set_button_to_not_pressed(&mut self) {
self.button_pressed=false;
}
fn switch_to_walk(&mut self) {
println!("Switching \"Don't Walk\" off");
println!("Switching \"Walk\" on");
}
fn switch_to_dont_walk(&mut self) {
println!("Switching \"Walk\" off");
println!("Switching \"Don't Walk\" on");
}
}
依赖项
~280–730KB
~17K SLoC