rkt_codegen 0.6.0

Procedural macros for the rkt web framework.
Documentation
use super::EntryAttr;

use devise::{Result, Spanned};
use proc_macro2::TokenStream;

/// `#[rkt::async_test]`: calls the attributed fn inside `rkt::async_test`
pub struct Test;

impl EntryAttr for Test {
    const REQUIRES_ASYNC: bool = true;

    fn function(f: &mut syn::ItemFn) -> Result<TokenStream> {
        let (attrs, vis, block, sig) = (&f.attrs, &f.vis, &f.block, &mut f.sig);
        sig.asyncness = None;
        Ok(
            quote_spanned!(block.span() => #(#attrs)* #[test] #vis #sig {
                ::rkt::async_test(async move #block)
            }),
        )
    }
}