I have three structs:
struct OneStruct {}
impl OneStruct {
pub fn OneTest() {
println!("TEST-01");
}
}
struct TwoStruct {}
impl TwoStruct {
pub fn TwoTest() {
println!("TEST-02");
}
}
struct ThreeStruct {}
impl ThreeStruct {
pub fn ThreeTest() {
println!("TEST-03");
}
}
I want to write a macro that takes the struct ident and invoke its *Test method, like this:
test!(OneStruct); // "TEST-01"
test!(TwoStruct); // "TEST-02"
test!(ThreeStruct); // "TEST-03"
What I tried:
macro_rules! test(
($name:ident) => ({
let name_string = &stringify!($name);
let name_wo_struct = &name_string[0..name_string.len()-6];
let test_method = &format!("{}{}", name_wo_struct, "Test");
let name_ident = syn::Ident::new(name_string, syn::export::Span::call_site());
let test_method_ident = syn::Ident::new(test_method, syn::export::Span::call_site());
// quote!(#name_ident::#test_method_ident();)
});
);
What's the right way to create new identifier in a Rust macro?