Finite state machines in rust; bendns fork to add types.
Diffstat (limited to 'rust-fsm-dsl/src/parser.rs')
| -rw-r--r-- | rust-fsm-dsl/src/parser.rs | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/rust-fsm-dsl/src/parser.rs b/rust-fsm-dsl/src/parser.rs index aabdf88..ffc0540 100644 --- a/rust-fsm-dsl/src/parser.rs +++ b/rust-fsm-dsl/src/parser.rs @@ -31,21 +31,27 @@ impl From<Output> for Option<Final> { /// Represents a part of state transition without the initial state. The `Parse` /// trait is implemented for the compact form. pub struct TransitionEntry { + pub attributes: Vec<Attribute>, pub input_value: Variant, pub final_state: Final, pub output: Option<Final>, + // pub as_: bool, } impl Parse for TransitionEntry { fn parse(input: ParseStream) -> Result<Self> { + let attributes = Attribute::parse_outer(input)?; let input_value = input.parse()?; input.parse::<Token![=>]>()?; + // let as_ = input.lookahead1().peek(Token![as]); let final_state = input.parse()?; let output = input.parse::<Output>()?.into(); Ok(Self { + // as_, input_value, final_state, output, + attributes, }) } } @@ -58,6 +64,7 @@ pub struct TransitionDef { impl Parse for TransitionDef { fn parse(input: ParseStream) -> Result<Self> { + let attributes = Attribute::parse_outer(input)?; let initial_state: Variant = input.parse()?; input.parse::<Token![=>]>()?; // Parse the transition in the simple format @@ -65,10 +72,13 @@ impl Parse for TransitionDef { let transitions = if !input.lookahead1().peek(token::Brace) { let input_value = input.parse()?; input.parse::<Token![=>]>()?; + // let as_ = input.lookahead1().peek(Token![as]); let final_state = input.parse()?; let output = input.parse::<Output>()?.into(); vec![TransitionEntry { + attributes, + // as_, input_value, final_state, output, |