Finite state machines in rust; bendns fork to add types.
Diffstat (limited to 'rust-fsm-dsl/src/lib.rs')
| -rw-r--r-- | rust-fsm-dsl/src/lib.rs | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/rust-fsm-dsl/src/lib.rs b/rust-fsm-dsl/src/lib.rs index 55385ca..8bd6e18 100644 --- a/rust-fsm-dsl/src/lib.rs +++ b/rust-fsm-dsl/src/lib.rs @@ -112,9 +112,17 @@ pub fn state_machine(tokens: TokenStream) -> TokenStream { ) .unwrap(); - let initial_ = initial_state.match_on(); + let (initial_, guard_) = initial_state.separate(); let final_ = final_state.reduce(); let (input_, guard) = input_value.separate(); + let guard = guard_ + .clone() + .zip(guard.clone()) + .map(|(x, y)| { + quote! { if #x && #y } + }) + .or(guard_.or(guard).map(|x| quote! { if #x })) + .unwrap_or_default(); // let input_ = input_value.match_on(); // let final_state_ = final_state.match_on(); |