https://github.com/p-kraszewski/pakr-fsm
https://github.com/p-kraszewski/pakr-fsm
Last synced: 8 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/p-kraszewski/pakr-fsm
- Owner: p-kraszewski
- License: bsd-2-clause
- Created: 2020-10-04T19:02:48.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2020-10-05T07:15:05.000Z (about 5 years ago)
- Last Synced: 2025-03-03T07:02:54.227Z (8 months ago)
- Language: Rust
- Size: 4.88 KB
- Stars: 0
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## Example
```rust
use pakr_fsm::*;
use std::error;
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
enum MyEv {
E1,
E2,
}
#[derive(Copy, Clone, Eq, PartialEq, Debug)]
enum MyState {
S1,
S2,
}
impl Default for MyState {
fn default() -> Self { Self::S1 }
}
struct MyFSM;
impl FSM for MyFSM {
type Event = MyEv;
type Response = &'static str;
type State = MyState;
fn new() -> Self { Self {} }
fn trasnsit(
&mut self,
old_state: &Self::State,
ev: &Self::Event,
) -> (Option, Option) {
match (old_state, ev) {
(MyState::S1, MyEv::E1) => (None, Some("Quitting")),
(MyState::S1, MyEv::E2) => (Some(MyState::S2), None),
(MyState::S2, MyEv::E1) => (Some(MyState::S1), Some("S2@E1->S1")),
(MyState::S2, MyEv::E2) => (Some(MyState::S2), Some("S2@E2->S2")),
}
}
fn respond(
&mut self,
old_state: &::State,
new_state: &Option<::State>,
resp: &Self::Response,
) {
println!("{:?} -> ({:?},{:?}", old_state, new_state, resp);
}
}
fn main() -> Result<(), Box> {
let fsm = Reactor::::new();
fsm.send(MyEv::E2)?;
fsm.send(MyEv::E2)?;
fsm.send(MyEv::E1)?;
fsm.send(MyEv::E1)?;
let ans = fsm.join().unwrap();
println!("Final state result: {:?}",ans);
Ok(())
}
```