pcd_rs_derive/
lib.rs

1mod common;
2mod derive_de;
3mod derive_ser;
4mod parse;
5mod utils;
6
7use parse::ItemStruct;
8use proc_macro::TokenStream;
9
10/// Derives PcdDeserialize trait on normal struct or tuple struct.
11///
12/// The field type can be either primitive, array of primitive or [Vec](std::vec::Vec) of primitive.
13#[proc_macro_derive(PcdDeserialize, attributes(pcd))]
14pub fn pcd_record_read_derive(input: TokenStream) -> TokenStream {
15    let input = syn::parse_macro_input!(input as ItemStruct);
16    let derive_read_tokens =
17        derive_de::f_pcd_record_read_derive(input).unwrap_or_else(|err| err.to_compile_error());
18    TokenStream::from(derive_read_tokens)
19}
20
21/// Derives PcdSerialize trait on normal struct or tuple struct.
22///
23/// The field type can be either primitive or array of primitive.
24#[proc_macro_derive(PcdSerialize, attributes(pcd))]
25pub fn pcd_record_write_derive(input: TokenStream) -> TokenStream {
26    let input = syn::parse_macro_input!(input as ItemStruct);
27    let derive_write_tokens =
28        derive_ser::f_pcd_record_write_derive(input).unwrap_or_else(|err| err.to_compile_error());
29    TokenStream::from(derive_write_tokens)
30}