protobuf-mapper-codegen 0.1.0

Automatic conversion between Protocol Buffers generated types and your Rust types.
Documentation
extern crate proc_macro;
use darling::FromDeriveInput;
use proc_macro::TokenStream;
use quote::quote;
use syn::{parse_macro_input, DeriveInput};

mod types;
mod derive_struct;
mod derive_enum;

macro_rules! try_parse {
  ($e:expr) => {
    match $e {
      Ok(v) => v,
      Err(e) => return TokenStream::from(e.write_errors()),
    }
  };
}

#[proc_macro_derive(ProtoPack, attributes(protobuf_mapper))]
pub fn derive_pack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
  let input = parse_macro_input!(input as DeriveInput);
  let receiver = try_parse!(derive_struct::InputReceiver::from_derive_input(&input));
  TokenStream::from(quote!(#receiver))
}

#[proc_macro_derive(ProtoUnpack, attributes(protobuf_mapper))]
pub fn derive_unpack(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
  let input = parse_macro_input!(input as DeriveInput);
  let receiver = try_parse!(derive_struct::InputReceiver::from_derive_input(&input)).to_unpack();
  TokenStream::from(quote!(#receiver))
}

#[proc_macro_derive(ProtoEnum, attributes(protobuf_mapper))]
pub fn derive_enum(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
  let input = parse_macro_input!(input as DeriveInput);
  let receiver = try_parse!(derive_enum::InputReceiver::from_derive_input(
    &input
  ));
  TokenStream::from(quote!(#receiver))
}