1mod attrs;
2mod types;
3
4use proc_macro::TokenStream;
5use quote::quote;
6use syn::{parse_macro_input, ItemFn, FnArg};
7
8use crate::attrs::parse_function_bind_attrs;
9
10#[proc_macro_attribute]
11pub fn pr47_function_bind(attr: TokenStream, item: TokenStream) -> TokenStream {
12 let item: ItemFn = parse_macro_input!(item as ItemFn);
13
14 let _attrs: Vec<String> = match parse_function_bind_attrs(attr) {
15 Ok(attrs) => attrs,
16 Err(e) => {
17 return (quote!{
18 compile_error!( #e ) ;
19 }).into()
20 }
21 };
22
23 let _args: Vec<&FnArg> = item.sig.inputs.iter().collect::<_>();
24 let ret = quote!{
25 #item
26 };
27
28 ret.into()
29}