in uniffi_internal_macros/src/ir/parse.rs [101:131]
fn parse(input: ParseStream) -> syn::Result<Self> {
let lookahead = input.lookahead1();
if lookahead.peek(Token![,]) || lookahead.peek(Token![;]) || lookahead.peek(Token![=]) {
Ok(Self::Unit)
} else if lookahead.peek(token::Brace) {
let content;
braced!(content in input);
Ok(Self::Named(
content
.parse_terminated(Field::parse_named, Token![,])?
.into_iter()
.collect(),
))
} else if lookahead.peek(token::Paren) {
let content;
parenthesized!(content in input);
let mut counter = 0;
let mut fields = vec![];
while !content.is_empty() {
fields.push(Field::parse_unnamed(&content, counter)?);
counter += 1;
if content.is_empty() {
break;
}
let _: Token![,] = content.parse()?;
}
Ok(Self::Unnamed(fields))
} else {
Err(lookahead.error())
}
}