protobuf_mapper_codegen/
lib.rs1extern 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}