use proc_macro2::Delimiter;
use parse::{ParseBuffer, Result};
use token;
pub struct Braces<'a> {
pub token: token::Brace,
pub content: ParseBuffer<'a>,
}
impl<'a> ParseBuffer<'a> {
#[doc(hidden)]
pub fn parse_braces(&self) -> Result<Braces<'a>> {
self.step_cursor(|cursor| {
if let Some((content, span, rest)) = cursor.group(Delimiter::Brace) {
let braces = Braces {
token: token::Brace(span),
content: ParseBuffer::new(span, cursor.advance(content)),
};
Ok((braces, rest))
} else {
Err(cursor.error("expected curly braces"))
}
})
}
}
#[macro_export]
macro_rules! braced {
($content:ident in $cursor:expr) => {
match $crate::parse::ParseBuffer::parse_braces(&$cursor) {
$crate::export::Ok(braces) => {
$content = braces.content;
braces.token
}
$crate::export::Err(error) => {
return $crate::export::Err(error);
}
}
};
}