1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#![feature(proc_macro_span)]
#![feature(proc_macro_span_shrink)]
#![feature(extend_one)]
mod parser;
use parser::Parser;
use proc_macro::TokenStream;
use quote::quote;
#[proc_macro]
pub fn html(input: TokenStream) -> TokenStream {
match Parser::new(input) {
Some(parser) => quote! {
{
let mut html = String::new();
#(#parser)*
html
}
}
.into(),
None => TokenStream::new(),
}
}