rust_transit_derive/
lib.rs1extern crate proc_macro;
5
6use crate::proc_macro::TokenStream;
7use quote::quote;
8use syn;
9
10#[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#[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}