attr_parser_fn/
args.rs

1use impl_variadics::impl_variadics;
2use syn::{
3    parse::{Parse, ParseStream},
4    Result,
5};
6
7use crate::with_comma;
8
9pub trait ParseRequiredArgs {
10    type Output;
11    fn parse(input: ParseStream) -> Result<Self::Output>;
12}
13
14impl_variadics! {
15    ..21 "T*" => {
16        impl<#(#T0,)*> ParseRequiredArgs for (#(#T0,)*)
17        where
18            #(#T0: Parse,)*
19        {
20            type Output = (#(#T0,)*);
21
22            fn parse(_input: ParseStream) -> Result<Self::Output> {
23                let r = (#({
24                    let x = _input.parse()?;
25                    with_comma(_input)?;
26                    x
27                },)*);
28
29                Ok(r)
30            }
31        }
32    }
33}