use proc_macro::TokenStream;
use syn::{parse_macro_input, ItemFn};
use quote::quote;
#[proc_macro_attribute]
pub fn test(_attr: TokenStream, item: TokenStream) -> TokenStream {
let input = parse_macro_input!(item as ItemFn);
let vis = input.vis;
let sig = input.sig;
let block = &input.block;
#[cfg(feature = "permutation_testing")]
let block = quote! {
{
concurrency_toolkit::loom::model(
|| # block
);
}
};
#[cfg(not(feature = "async_tokio"))]
let expanded = quote! {
#[test]
#[concurrency_toolkit::maybe_async::must_be_sync]
# vis # sig # block
};
#[cfg(feature = "async_tokio")]
let expanded = quote! {
#[concurrency_toolkit::tokio::test]
#[concurrency_toolkit::maybe_async::must_be_async]
# vis async # sig # block
};
TokenStream::from(expanded)
}