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.rs10
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,