testmacro/
lib.rs

1extern crate proc_macro;
2use proc_macro::TokenStream;
3use quote::quote;
4
5#[proc_macro_attribute]
6pub fn test_item(_attr: TokenStream, item: TokenStream) -> TokenStream {
7    let input = syn::parse_macro_input!(item as syn::ItemFn);
8    let name = &input.sig.ident.to_string();
9    let func = &input.block;
10
11    let r = quote! {
12        #[test_case]
13        const t: TestType = TestType {
14            modname: module_path!(),
15            name: #name,
16            f: || -> Result<(),()> {
17                #func
18                Ok(())
19            }
20        };
21    };
22    r.into()
23}