1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
use proc_macro::TokenStream;
use quote::{format_ident, quote};
#[proc_macro_attribute]
pub fn testgen(attr: TokenStream, item: TokenStream) -> TokenStream {
let item: proc_macro2::TokenStream = proc_macro2::TokenStream::from(item);
let attr: proc_macro2::TokenStream = proc_macro2::TokenStream::from(attr);
let macro_ident = format_ident!("testgen_{}", attr.to_string());
let macro_gen = quote! {
#[macro_export]
macro_rules! #macro_ident {
() => {
mod #attr {
use super::*;
#item
}
};
}
};
macro_gen.into()
}