rgz_derive 0.1.0

A derive macro for rgz
Documentation
use proc_macro::TokenStream;
use quote::quote;
use syn;
use regex::Regex;

#[proc_macro_derive(GzMessage)]
pub fn gz_message_macro_derive(input: TokenStream) -> TokenStream {
    let ast = syn::parse(input).unwrap();


    impl_gz_message_macro(&ast)
}

fn impl_gz_message_macro(ast: &syn::DeriveInput) -> TokenStream {

    // let name = &ast.ident;
    let name = &ast.ident;
    let name_str = name.to_string();
    let re = Regex::new(r"(V)$").unwrap();
    let replace_name = re.replace(&name_str,"_V").to_string();
    let type_name = format!("gz.msgs.{}", replace_name);

    let gen = quote! {
        impl crate::GzMessage for #name {
            const TYPE_NAME: &'static str = #type_name;
        }
    };
    gen.into()
}