attr_parser_fn/
rest_args.rs

1use syn::{
2    parse::{Parse, ParseStream},
3    token::Token,
4    Result,
5};
6
7use crate::with_comma;
8
9pub trait ParseRestArgs: Sized {
10    fn parse(input: ParseStream) -> Result<Self>;
11}
12
13impl ParseRestArgs for () {
14    fn parse(_: ParseStream) -> Result<Self> {
15        Ok(())
16    }
17}
18
19impl<P> ParseRestArgs for Vec<P>
20where
21    P: Parse + Token,
22{
23    fn parse(input: ParseStream) -> Result<Self> {
24        let mut vec = vec![];
25        while let Some(v) = input.parse::<Option<P>>()? {
26            vec.push(v);
27            with_comma(input)?;
28        }
29        Ok(vec)
30    }
31}