attr-parser-fn 0.3.4

parse attribute procedual macros in functional way
Documentation
use impl_variadics::impl_variadics;
use syn::{
    parse::{Parse, ParseStream},
    Result,
};

use crate::with_comma;

pub trait ParseRequiredArgs {
    type Output;
    fn parse(input: ParseStream) -> Result<Self::Output>;
}

impl_variadics! {
    ..21 "T*" => {
        impl<#(#T0,)*> ParseRequiredArgs for (#(#T0,)*)
        where
            #(#T0: Parse,)*
        {
            type Output = (#(#T0,)*);

            fn parse(_input: ParseStream) -> Result<Self::Output> {
                let r = (#({
                    let x = _input.parse()?;
                    with_comma(_input)?;
                    x
                },)*);

                Ok(r)
            }
        }
    }
}