prost_serde_derive/
lib.rs1#[macro_use]
2extern crate quote;
3
4mod attr;
5mod context;
6mod deserialize;
7mod serialize;
8mod util;
9
10use crate::{deserialize::expand_deserialize, serialize::expand_serialize};
11
12use proc_macro::TokenStream;
13use syn::{parse_macro_input, DeriveInput, Error};
14
15fn to_compile_errors(errors: Vec<syn::Error>) -> proc_macro2::TokenStream {
16 let compile_errors = errors.iter().map(Error::to_compile_error);
17 quote!(#(#compile_errors)*)
18}
19
20#[proc_macro_derive(Deserialize, attributes(prost, prost_serde_derive))]
21pub fn derive_deserialize(input: TokenStream) -> TokenStream {
22 let input = parse_macro_input!(input as DeriveInput);
23
24 expand_deserialize(input)
25 .unwrap_or_else(to_compile_errors)
26 .into()
27}
28
29#[proc_macro_derive(Serialize, attributes(prost, prost_serde_derive))]
30pub fn derive_serialize(input: TokenStream) -> TokenStream {
31 let input = parse_macro_input!(input as DeriveInput);
32
33 expand_serialize(input)
34 .unwrap_or_else(to_compile_errors)
35 .into()
36}