tinyio_macro/
lib.rs

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}