1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
extern crate proc_macro;

use proc_macro2::{
    Ident,
};

use quote::{
    quote,
};

#[proc_macro]
pub fn group_name(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
    let group = syn::parse_macro_input!(input as Ident);

    let appended_group = format!("{}_GROUP", group.to_string().to_uppercase());
    let ident = Ident::new(&appended_group, group.span());

    let expanded = quote!(#ident);
    proc_macro::TokenStream::from(expanded)
}