extendr_macros/
extendr_function.rs

1use crate::{extendr_options::ExtendrOptions, wrappers};
2use proc_macro::TokenStream;
3use quote::quote;
4use syn::ItemFn;
5
6/// Generate bindings for a single function.
7pub(crate) fn extendr_function(mut func: ItemFn, opts: &ExtendrOptions) -> TokenStream {
8    let mut wrappers: Vec<ItemFn> = Vec::new();
9
10    let res =
11        wrappers::make_function_wrappers(opts, &mut wrappers, "", &func.attrs, &mut func.sig, None);
12    if let Err(e) = res {
13        return e.into_compile_error().into();
14    };
15
16    TokenStream::from(quote! {
17        #func
18
19        # ( #wrappers )*
20    })
21}