1use parse_it_codegen::syntax::{Mod, ParseIt};
2
3#[proc_macro]
4pub fn parse_it(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
5 let input = syn::parse_macro_input!(input as ParseIt);
6 let mut result = proc_macro::TokenStream::new();
7 for submod in input.mods {
8 match submod {
9 Mod::Parser(parser_mod) => {
10 let middle = match parser_mod.compile() {
11 Ok(middle) => middle,
12 Err(msg) => return msg.into(),
13 };
14 let tokens: proc_macro::TokenStream = match middle.expand() {
15 Ok(expanded) => expanded.into(),
16 Err(msg) => return msg.into(),
17 };
18 result.extend(tokens);
19 }
20 Mod::Lexer(lexer_mod) => {
21 let middle = match lexer_mod.compile() {
22 Ok(middle) => middle,
23 Err(msg) => return msg.into(),
24 };
25 let tokens: proc_macro::TokenStream = match middle.expand() {
26 Ok(expanded) => expanded.into(),
27 Err(msg) => return msg.into(),
28 };
29 result.extend(tokens);
30 }
31 }
32 }
33 result
34}