1use fusen_decl_macro::fusen_attr;
2use proc_macro::TokenStream;
3use quote::ToTokens;
4use syn::parse::Parser;
5mod builder;
6mod config;
7mod handler;
8
9#[proc_macro_attribute]
10pub fn builder(_attr: TokenStream, item: TokenStream) -> TokenStream {
11 builder::builder(item)
12}
13
14#[proc_macro_attribute]
15pub fn hot_config(_attr: TokenStream, item: TokenStream) -> TokenStream {
16 config::hot_config(item)
17}
18
19
20#[proc_macro_attribute]
21pub fn handler(attr: TokenStream, item: TokenStream) -> TokenStream {
22 let attr = HandlerAttr::from_attr(attr);
23 match attr {
24 Ok(attr) => handler::fusen_handler(attr, item),
25 Err(err) => err.into_compile_error().into(),
26 }
27}
28
29fusen_attr! {
30 HandlerAttr,
31 id
32}