fluvio_protocol_derive/
lib.rs

1extern 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}