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}