Newer
Older
use proc_macro::TokenStream;
use quote::quote;
use syn::ItemFn;
#[proc_macro_attribute]
pub fn start(_attr: TokenStream, item: TokenStream) -> TokenStream {
let ItemFn { attrs, vis, sig, block } = syn::parse(item).unwrap();
(quote! {
#(#attrs)*
#vis #sig {
::orml_weight_meter::start();
let result = #block;
::orml_weight_meter::finish();
result
}
})
.into()
}
#[proc_macro_attribute]
pub fn weight(attr: TokenStream, item: TokenStream) -> TokenStream {
let weight: syn::Expr = syn::parse(attr).unwrap();
let ItemFn { attrs, vis, sig, block } = syn::parse(item).unwrap();
(quote! {
#(#attrs)*
#vis #sig {
::orml_weight_meter::using(#weight);
#block
}
})
.into()
}