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 | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/rust-fsm-dsl/src/parser.rs b/rust-fsm-dsl/src/parser.rs index 63dc9c0..869772d 100644 --- a/rust-fsm-dsl/src/parser.rs +++ b/rust-fsm-dsl/src/parser.rs @@ -127,21 +127,27 @@ pub struct StateMachineDef { } pub enum ImplementationRequired { - Yes(Type), + Yes(Ident, Generics), No(Path), } impl ImplementationRequired { - pub fn tokenize(&self, f: impl Fn(&Type) -> TokenStream) -> TokenStream { + pub fn tokenize(&self, f: impl Fn(&Ident) -> TokenStream) -> TokenStream { match self { - ImplementationRequired::Yes(ident) => f(ident), + ImplementationRequired::Yes(ident, _) => f(ident), ImplementationRequired::No(_) => TokenStream::default(), } } - pub fn path(self) -> TokenStream { + pub fn g(&self) -> TokenStream { match self { - ImplementationRequired::Yes(ident) => quote::quote! { #ident }, - ImplementationRequired::No(path) => quote::quote! { #path }, + ImplementationRequired::Yes(_, g) => quote::quote! {#g}, + ImplementationRequired::No(_) => TokenStream::default(), + } + } + pub fn path(self) -> Path { + match self { + ImplementationRequired::Yes(ident, _) => ident.into(), + ImplementationRequired::No(path) => path, } } } @@ -171,7 +177,12 @@ impl Parse for StateMachineDef { ImplementationRequired::No(x) }) }) - .unwrap_or_else(|| input.parse::<Type>().map(ImplementationRequired::Yes)) + .unwrap_or_else(|| { + let t = input.parse::<Ident>()?; + let g = input.parse::<Generics>()?; + dbg!(&g); + Ok(ImplementationRequired::Yes(t, g)) + }) }; let state_name = i()?; input.parse::<Token![=>]>()?; |