use syn::{
self, parenthesized,
parse::{Parse, ParseStream, ParseBuffer},
Ident, LitStr, Result, Token};
pub struct WhitelistArgs {
pub struct_name: String,
pub values: Vec<String>,
}
impl Parse for WhitelistArgs {
fn parse (input: ParseStream) -> Result<Self> {
let struct_name: Ident = input.parse()?;
let struct_name = struct_name.to_string();
input.parse::<Token![:]>()?;
let content: ParseBuffer;
parenthesized!(content in input);
let mut values: Vec<String> = Vec::new();
while !content.is_empty() {
let value: LitStr = content.parse()?;
values.push(value.value());
if content.peek(Token![,]) {
content.parse::<Token![,]>()?;
} else {
break;
}
}
Ok(WhitelistArgs {
struct_name,
values
})
}
}