1use proc_macro::TokenStream;
2use quote::quote;
3use syn::{parse_macro_input, ItemFn, ReturnType, Signature};
4
5#[proc_macro_attribute]
6pub fn main(_attr: TokenStream, item: TokenStream) -> TokenStream {
7 let ItemFn { attrs, vis, sig, block } = parse_macro_input!(item);
8 let Signature { ident, generics, inputs, output, .. } = sig;
9
10 let return_type = match output {
11 ReturnType::Default => quote! { () },
12 ReturnType::Type(_, ty) => quote! { #ty },
13 };
14
15 let gen = quote! {
16 #(#attrs)*
17 #vis fn #ident #generics(#inputs) -> #return_type {
18 let rt = ::mini_tokio::Runtime::new();
19 rt.block_on(async {
20 #block
21 });
22 }
23 };
24
25 gen.into()
26}