diff options
Diffstat (limited to 'macros/src/injectable')
| -rw-r--r-- | macros/src/injectable/macro_args.rs | 34 | 
1 files changed, 21 insertions, 13 deletions
| diff --git a/macros/src/injectable/macro_args.rs b/macros/src/injectable/macro_args.rs index 50d4087..1dd06f8 100644 --- a/macros/src/injectable/macro_args.rs +++ b/macros/src/injectable/macro_args.rs @@ -17,26 +17,34 @@ impl Parse for InjectableMacroArgs  {      fn parse(input: ParseStream) -> syn::Result<Self>      { -        let interface = input.parse::<TypePath>().ok(); +        let input_fork = input.fork(); -        if interface.is_some() { -            let comma_input_lookahead = input.lookahead1(); +        let mut interface = None; -            if !comma_input_lookahead.peek(Token![,]) { +        if input_fork.parse::<MacroFlag>().is_err() { +            // Input doesn't begin with flags + +            interface = input.parse::<TypePath>().ok(); + +            if interface.is_some() { +                let comma_input_lookahead = input.lookahead1(); + +                if !comma_input_lookahead.peek(Token![,]) { +                    return Ok(Self { +                        interface, +                        flags: Punctuated::new(), +                    }); +                } + +                input.parse::<Token![,]>()?; +            } + +            if input.is_empty() {                  return Ok(Self {                      interface,                      flags: Punctuated::new(),                  });              } - -            input.parse::<Token![,]>()?; -        } - -        if input.is_empty() { -            return Ok(Self { -                interface, -                flags: Punctuated::new(), -            });          }          let flags = Punctuated::<MacroFlag, Token![,]>::parse_terminated(input)?; | 
