protobuf_mapper_codegen/
lib.rs

1extern crate proc_macro;
2use darling::FromDeriveInput;
3use proc_macro::TokenStream;
4use quote::quote;
5use syn::{parse_macro_input, DeriveInput};
6
7mod types;
8mod derive_struct;
9mod derive_enum;
10
11macro_rules! try_parse {
12  ($e:expr) => {
13    match $e {
14      Ok(v) => v,
15      Err(e) => return TokenStream::from(e.write_errors()),
16    }
17  };
18}
19
20#[proc_macro_derive(ProtoPack, attributes(protobuf_mapper))]
21pub fn derive_pack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
22  let input = parse_macro_input!(input as DeriveInput);
23  let receiver = try_parse!(derive_struct::InputReceiver::from_derive_input(&input));
24  TokenStream::from(quote!(#receiver))
25}
26
27#[proc_macro_derive(ProtoUnpack, attributes(protobuf_mapper))]
28pub fn derive_unpack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
29  let input = parse_macro_input!(input as DeriveInput);
30  let receiver = try_parse!(derive_struct::InputReceiver::from_derive_input(&input)).to_unpack();
31  TokenStream::from(quote!(#receiver))
32}
33
34#[proc_macro_derive(ProtoEnum, attributes(protobuf_mapper))]
35pub fn derive_enum(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
36  let input = parse_macro_input!(input as DeriveInput);
37  let receiver = try_parse!(derive_enum::InputReceiver::from_derive_input(
38    &input
39  ));
40  TokenStream::from(quote!(#receiver))
41}