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 | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/rust-fsm-dsl/src/parser.rs b/rust-fsm-dsl/src/parser.rs index 7a25efe..aabdf88 100644 --- a/rust-fsm-dsl/src/parser.rs +++ b/rust-fsm-dsl/src/parser.rs @@ -117,13 +117,11 @@ impl Parse for TransitionDef { /// ``` pub struct StateMachineDef { pub doc: Vec<Attribute>, - /// The visibility modifier (applies to all generated items) - pub visibility: Visibility, - pub state_name: ImplementationRequired, - pub input_name: ImplementationRequired, - pub output_name: ImplementationRequired, + + pub state_name: (Vec<Attribute>, Visibility, ImplementationRequired), + pub input_name: (Vec<Attribute>, Visibility, ImplementationRequired), + pub output_name: (Vec<Attribute>, Visibility, ImplementationRequired), pub transitions: Vec<TransitionDef>, - pub attributes: Vec<Attribute>, } pub enum ImplementationRequired { @@ -155,20 +153,20 @@ impl ImplementationRequired { impl Parse for StateMachineDef { fn parse(input: ParseStream) -> Result<Self> { let mut doc = Vec::new(); - let attributes = Attribute::parse_outer(input)? - .into_iter() - .filter_map(|attribute| { - if attribute.path().is_ident("doc") { - doc.push(attribute); - None - } else { - Some(attribute) - } - }) - .collect(); + let mut i = || { + let attributes = Attribute::parse_outer(input)? + .into_iter() + .filter_map(|attribute| { + if attribute.path().is_ident("doc") { + doc.push(attribute); + None + } else { + Some(attribute) + } + }) + .collect(); + let visibility = input.parse()?; - let visibility = input.parse()?; - let i = || { input .peek(Token![::]) .then(|| { @@ -182,7 +180,9 @@ impl Parse for StateMachineDef { let g = input.parse::<Generics>()?; Ok(ImplementationRequired::Yes(t, g)) }) + .map(|x| (attributes, visibility, x)) }; + let state_name = i()?; input.parse::<Token![=>]>()?; let input_name = i()?; @@ -196,12 +196,10 @@ impl Parse for StateMachineDef { Ok(Self { doc, - visibility, state_name, input_name, output_name, transitions, - attributes, }) } } |