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
use proc_macro::TokenStream;
use syn::parse_macro_input;
mod component;
mod template;
#[proc_macro]
pub fn template(component: TokenStream) -> TokenStream {
let component = parse_macro_input!(component as template::HtmlRoot);
template::template_impl(component).into()
}
#[proc_macro_attribute]
pub fn component(attr: TokenStream, component: TokenStream) -> TokenStream {
let attr = parse_macro_input!(attr as component::ComponentFunctionName);
let component = parse_macro_input!(component as component::ComponentFunction);
component::component_impl(attr, component)
.unwrap_or_else(|err| err.to_compile_error())
.into()
}