arara-macros 1.2.0

A arara dependecie
Documentation
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)
}