Skip to main content

gz_msgs_derive/
lib.rs

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}