rust_transit_derive/
lib.rs

1//! # rust_transit_derive
2//! 
3//! Derive macros to easily define event types and consumer groups
4extern crate proc_macro;
5
6use crate::proc_macro::TokenStream;
7use quote::quote;
8use syn;
9
10/// EventType code is the actual type name
11#[proc_macro_derive(EventType)]
12pub fn event_type_derive(input: TokenStream) -> TokenStream {
13    let ast = syn::parse(input).unwrap();
14
15    impl_event_type(&ast)
16}
17
18fn impl_event_type(ast: &syn::DeriveInput) -> TokenStream {
19    let name = &ast.ident;
20    let gen = quote! {
21        impl EventType for #name {
22            fn code() -> String {
23                stringify!(#name).to_owned()
24            }
25        }
26    };
27    gen.into()
28}
29
30/// Consumer group is the actual type name
31#[proc_macro_derive(ConsumerGroup)]
32pub fn consumer_group_derive(input: TokenStream) -> TokenStream {
33    let ast = syn::parse(input).unwrap();
34
35    impl_consumer_group(&ast)
36}
37
38fn impl_consumer_group(ast: &syn::DeriveInput) -> TokenStream {
39    let name = &ast.ident;
40    let gen = quote! {
41        impl ConsumerGroup for #name {
42            fn group() -> String {
43                stringify!(#name).to_owned()
44            }
45        }
46    };
47    gen.into()
48}