lotus_bindgen_macros/
lib.rs1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro_attribute]
5pub fn lotus_bindgen(_attr: TokenStream, item: TokenStream) -> TokenStream {
6 if let Ok(input) = syn::parse::<syn::ForeignItemFn>(item.clone()) {
7 foreign_item_fn(input)
8 } else if let Ok(input) = syn::parse::<syn::ItemFn>(item) {
9 item_fn(input)
10 } else {
11 panic!("lotus_bindgen can only be used on functions");
12 }
13}
14
15fn foreign_item_fn(input: syn::ForeignItemFn) -> proc_macro::TokenStream {
16 let syn::ForeignItemFn {
17 attrs, vis, sig, ..
18 } = input;
19
20 let output = quote!(
30 #(#attrs)*
31 #vis #sig;
32 );
33
34 proc_macro::TokenStream::from(output)
35}
36
37fn item_fn(input: syn::ItemFn) -> proc_macro::TokenStream {
38 let syn::ItemFn {
39 attrs,
40 vis,
41 sig,
42 block,
43 ..
44 } = input;
45
46 let output = quote!(
47 #(#attrs)*
48 #vis #sig #block
49 );
50
51 proc_macro::TokenStream::from(output)
52}