shared_tokio_runtime_macros/
lib.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
extern crate proc_macro;

use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, parse_quote, Item};

#[proc_macro_attribute]
pub fn runtime(_metadata: TokenStream, input: TokenStream) -> TokenStream {
    let input: Item = match parse_macro_input!(input as Item) {
        Item::Fn(mut fn_item) => {
            //let block = fn_item.block;
            //let stmts = block.stmts;
            fn_item.sig.asyncness = None;
            // fn_item.block = parse_quote! {
            //     {
            //         shared_tokio_runtime::rt().block_on(async {
            //             #stmts
            //         })
            //     }
            // };
            Item::Fn(fn_item)
        },
        _ => {
            panic!("The `runtime` macro attribute is only valid when called on a fn.")
        }
    };
    TokenStream::from(quote! (#input))
}