---
source: macro/src/lib.rs
expression: "rustfmt_code(&expand_grammar(parse_quote!\n{\n #[adze::grammar(\"test\")] mod grammar\n {\n #[adze::language] pub struct NumberList\n {\n #[adze::delimited(#[adze::leaf(text = \",\")] ())] numbers:\n Vec<Number>,\n } pub struct Number\n {\n #[adze::leaf(pattern = r\"\\d+\", transform = |v|\n v.parse().unwrap())] v: i32\n }\n }\n})? .to_token_stream().to_string())"
---
mod grammar {
pub struct NumberList {
numbers: Vec<Number>,
}
impl ::adze::Extract<NumberList> for NumberList {
type LeafFn = ();
const GRAMMAR_NAME: &'static str = "test";
#[allow(non_snake_case)]
fn extract(
node: Option<&::adze::pure_parser::ParsedNode>,
source: &[u8],
last_idx: usize,
_leaf_fn: Option<&Self::LeafFn>,
) -> Self {
let node = node.expect("Extract called with None node for struct");
::adze::__private::extract_struct_or_variant(node, move |cursor, last_idx| NumberList {
numbers: {
::adze::__private::extract_field::<Vec<Number>, _>(
cursor, source, last_idx, "numbers", None,
)
},
})
}
}
pub struct Number {
v: i32,
}
impl ::adze::Extract<Number> for Number {
type LeafFn = ();
const GRAMMAR_NAME: &'static str = "test";
#[allow(non_snake_case)]
fn extract(
node: Option<&::adze::pure_parser::ParsedNode>,
source: &[u8],
last_idx: usize,
_leaf_fn: Option<&Self::LeafFn>,
) -> Self {
let node = node.expect("Extract called with None node for struct");
::adze::__private::extract_struct_or_variant(node, move |cursor, last_idx| Number {
v: {
::adze::__private::extract_field::<adze::WithLeaf<i32>, _>(
cursor,
source,
last_idx,
"v",
Some(&|v| v.parse().unwrap()),
)
},
})
}
}
include!(concat!(
env!("OUT_DIR"),
"/grammar_",
"test",
"/parser_",
"test",
".rs"
));
pub fn language() -> &'static ::adze::pure_parser::TSLanguage {
&LANGUAGE
}
pub const LANGUAGE_REF: &'static ::adze::pure_parser::TSLanguage = &LANGUAGE;
#[doc = r" Parse an input string according to the grammar. Returns either any parsing errors that happened, or a"]
#[doc = "[`NumberList`]"]
#[doc = r" instance containing the parsed structured data."]
pub fn parse(input: &str) -> core::result::Result<NumberList, Vec<::adze::errors::ParseError>> {
::adze::__private::parse::<NumberList>(input, || language())
}
}