1use proc_macro::TokenStream;
2use quote::quote;
3
4#[proc_macro_attribute]
5pub fn main(_attr: TokenStream, input: TokenStream) -> TokenStream {
6 let input = syn::parse_macro_input!(input as syn::ItemFn);
7 let asyncness = input
8 .sig
9 .asyncness
10 .unwrap_or_else(|| panic!("fn main needs to be async fn"));
11 let stmts = input.block.stmts;
12 let expend = quote! {
13 fn main(){
14 tinyio::init();
15 tinyio::spawn({
16 #asyncness move {
17 #(#stmts)*
18 }
19 });
20 let mut executor = tinyio::runtime::executor::Executor::new();
21 executor.run();
22 }
23 };
24 expend.into()
25}