1#![allow(unused)]
2
3extern crate proc_macro;
4
5use proc_macro::{TokenStream};
6use quote::quote;
7use syn::{parse_macro_input, Attribute, ItemFn, Visibility, Signature};
8
9#[proc_macro_attribute]
10pub fn externcfnattr(_attr: TokenStream, item: TokenStream) -> TokenStream {
11 let input = parse_macro_input!(item as ItemFn);
13
14 let ItemFn { attrs, vis, sig, block } = input;
16 let Signature { constness, unsafety, ident, inputs, output, .. } = sig;
17
18 let expanded = quote! {
20 #(#attrs)*
21 #[no_mangle]
22 #vis #constness #unsafety extern "C" fn #ident(#inputs) #output
23 #block
24 };
25
26 TokenStream::from(expanded)
28}