extendr_macros/
extendr_function.rs
1use crate::{extendr_options::ExtendrOptions, wrappers};
2use proc_macro::TokenStream;
3use quote::quote;
4use syn::ItemFn;
5
6pub(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}