pr47_codegen/
lib.rs

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}