1 use syn::parse::{Error, Parse, ParseStream, Result}; 2 use syn::{LitInt, Path, Token}; 3 4 pub enum Args { 5 None, 6 Path(Path), 7 PathPos(Path, usize), 8 } 9 10 impl Parse for Args { parse(input: ParseStream) -> Result<Self>11 fn parse(input: ParseStream) -> Result<Self> { 12 if input.is_empty() { 13 return Ok(Args::None); 14 } 15 let path: Path = input.parse()?; 16 if input.is_empty() { 17 return Ok(Args::Path(path)); 18 } 19 input.parse::<Token![,]>()?; 20 let lit: LitInt = input.parse()?; 21 let pos: usize = lit.base10_parse()?; 22 if pos > 9999 { 23 return Err(Error::new(lit.span(), "maximum 9999 is supported")); 24 } 25 Ok(Args::PathPos(path, pos)) 26 } 27 } 28