use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, Ident};
#[proc_macro_attribute]
pub fn startup(_: TokenStream, item: TokenStream) -> TokenStream {
let mut func = parse_macro_input!(item as syn::ItemFn);
let original_func_name = func.sig.ident;
let func_name = Ident::new("arara_startup", original_func_name.span());
drop(original_func_name);
func.sig.ident = func_name.clone();
let token = quote! {
#func
fn main() {
let future_block = async {
let req = arara::proc_utils::new_request();
let response: arara::Response = #func_name(req).await;
println!("Status: {}", response.status);
if response.content_type.is_empty() {
println!("Content-Type: text/html")
} else {
println!("Content-Type: {}", response.content_type)
}
for (key, value) in response.headers {
println!("{}: {}", key, value);
}
if !response.body.is_empty() {
println!("\n{}", response.body);
}
};
arara::proc_utils::block_on(future_block);
}
};
TokenStream::from(token)
}