1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
#[macro_use] extern crate proc_macro_hack; extern crate proc_macro2; mod builtins; mod parser; mod state; use parser::parse_body; use proc_macro2::TokenStream; use state::State; use std::env; use std::str::FromStr; proc_macro_expr_impl! { pub fn router_dsl_impl(input: &str) -> String { let mut stream = TokenStream::from_str(input).unwrap().into_iter(); let result = parse_body(&mut stream, &State::default()); if let Ok(debug) = env::var("WARPDSL_DEBUG") { if debug.contains("input") { eprintln!("======== [DEBUG:INPUT] ========="); for token in TokenStream::from_str(input).unwrap() { eprintln!("{:#?}", token); } eprintln!("================================"); } if debug.contains("output") { eprintln!("======== [DEBUG:OUTPUT] ========"); eprintln!("{}", result); eprintln!("================================"); } } result } }