futures_cputask_derive/
lib.rs1extern crate proc_macro;
2
3use crate::proc_macro::TokenStream;
4use quote::quote;
5use syn::{parse_macro_input, ItemFn};
6
7#[proc_macro_attribute]
12pub fn async_task(_attr: TokenStream, item: TokenStream) -> TokenStream {
13 let input = parse_macro_input!(item as ItemFn);
14 let attrs = input.attrs;
15 let vis = input.vis;
16 let sig = input.sig;
17 let block = input.block;
18
19 let output = quote!{
20 #(#attrs)*
21 #vis async #sig {
22 futures_cputask::run_task(move || {#block}).await
23 }
24 };
25 output.into()
26}