1#![doc = include_str!("../README.md")]
2
3use proc_macro::TokenStream;
4use quote::quote;
5use syn::parse_macro_input;
6
7#[proc_macro_derive(GzMessage)]
8pub fn gz_derive(input: TokenStream) -> TokenStream {
9 let input = parse_macro_input!(input as syn::DeriveInput);
10 let type_name = &input.ident;
11
12 match &input.data {
13 syn::Data::Struct(_) => quote! {
14 impl ::gz_msgs_common::GzMessage for #type_name {
15 const GZ_TYPE_NAME: &'static str = concat!("gz.msgs.", stringify!(#type_name));
16 }
17 }
18 .into(),
19 _ => panic!("Enums or Unions are not supported"),
20 }
21}
22
23#[proc_macro_derive(IgnMessage)]
24pub fn ign_derive(input: TokenStream) -> TokenStream {
25 let input = parse_macro_input!(input as syn::DeriveInput);
26 let type_name = &input.ident;
27
28 match &input.data {
29 syn::Data::Struct(_) => quote! {
30 impl ::gz_msgs_common::GzMessage for #type_name {
31 const GZ_TYPE_NAME: &'static str = concat!("ignition.msgs.", stringify!(#type_name));
32 }
33 }
34 .into(),
35 _ => panic!("Enums or Unions are not supported"),
36 }
37}