macro_rules! braced { ($content:ident in $cursor:expr) => { ... }; }
Expand description
Parse a set of curly braces and expose their content to subsequent parsers.
Example
use syn::{braced, token, Ident, Result, Token, Type};
use syn::parse::{Parse, ParseStream};
use syn::punctuated::Punctuated;
// Parse a simplified struct syntax like:
//
// struct S {
// a: A,
// b: B,
// }
struct Struct {
struct_token: Token![struct],
ident: Ident,
brace_token: token::Brace,
fields: Punctuated<Field, Token![,]>,
}
struct Field {
name: Ident,
colon_token: Token![:],
ty: Type,
}
impl Parse for Struct {
fn parse(input: ParseStream) -> Result<Self> {
let content;
Ok(Struct {
struct_token: input.parse()?,
ident: input.parse()?,
brace_token: braced!(content in input),
fields: content.parse_terminated(Field::parse, Token![,])?,
})
}
}
impl Parse for Field {
fn parse(input: ParseStream) -> Result<Self> {
Ok(Field {
name: input.parse()?,
colon_token: input.parse()?,
ty: input.parse()?,
})
}
}