Revise treatment of name parameter.

This commit is contained in:
Stephen Chung
2020-08-16 18:24:42 +08:00
parent 7eb75f6790
commit 31a05f8c48
3 changed files with 22 additions and 32 deletions

View File

@@ -106,20 +106,11 @@ pub fn export_fn(
args: proc_macro::TokenStream,
input: proc_macro::TokenStream,
) -> proc_macro::TokenStream {
let output = proc_macro2::TokenStream::from(input.clone());
let mut output = proc_macro2::TokenStream::from(input.clone());
let parsed_params = parse_macro_input!(args as function::ExportedFnParams);
let function_def = parse_macro_input!(input as function::ExportedFn);
let mut output = if let Some(ref rename) = parsed_params.name {
// If it wasn't a function, it wouldn't have parsed earlier, so unwrap() is fine.
let mut output_fn: syn::ItemFn = syn::parse2(output.clone()).unwrap();
let new_name = syn::Ident::new(rename, output_fn.sig.ident.span());
output_fn.sig.ident = new_name;
output_fn.into_token_stream()
} else {
output
};
output.extend(function_def.generate_with_params(parsed_params));
proc_macro::TokenStream::from(output)
}