fluvio_protocol_derive/
lib.rs1extern crate proc_macro;
2
3mod api;
4mod ast;
5mod de;
6mod ser;
7mod util;
8
9use self::api::generate_request_traits;
10use self::api::parse_and_generate_api;
11use self::de::generate_decode_trait_impls;
12use self::de::generate_default_trait_impls;
13use self::ser::generate_encode_trait_impls;
14
15use proc_macro::TokenStream;
16use syn::parse_macro_input;
17
18#[proc_macro_derive(Decoder, attributes(varint, trace, fluvio))]
19pub fn fluvio_decode(tokens: TokenStream) -> TokenStream {
20 let input = parse_macro_input![tokens as ast::DeriveItem];
21 let expanded = generate_decode_trait_impls(&input);
22
23 expanded.into()
24}
25
26#[proc_macro_derive(Encoder, attributes(varint, trace, fluvio))]
27pub fn fluvio_encode(tokens: TokenStream) -> TokenStream {
28 let input = parse_macro_input![tokens as ast::DeriveItem];
29 let expanded = generate_encode_trait_impls(&input);
30
31 expanded.into()
32}
33
34#[proc_macro]
35pub fn fluvio_api(tokens: TokenStream) -> TokenStream {
36 let inputs = parse_macro_input![tokens as syn::DeriveInput];
37
38 let expanded = parse_and_generate_api(&inputs);
39 expanded.into()
40}
41
42#[proc_macro_derive(RequestApi, attributes(varint, fluvio))]
43pub fn fluvio_request(tokens: TokenStream) -> TokenStream {
44 let inputs = parse_macro_input![tokens as syn::DeriveInput];
45
46 let expanded = generate_request_traits(&inputs);
47 expanded.into()
48}
49
50#[proc_macro_derive(FluvioDefault, attributes(fluvio))]
51pub fn fluvio_default(tokens: TokenStream) -> TokenStream {
52 let input = parse_macro_input![tokens as ast::DeriveItem];
53 let expanded = generate_default_trait_impls(&input);
54
55 expanded.into()
56}