1#![allow(
2 clippy::module_name_repetitions,
3 clippy::needless_pass_by_value,
4 clippy::unseparated_literal_suffix
5)]
6
7extern crate proc_macro;
8
9mod attr;
10mod bound;
11mod de;
12mod fallback;
13mod ser;
14
15use proc_macro::TokenStream;
16use proc_macro2::{Ident, Span};
17use quote::{ToTokens, TokenStreamExt as _};
18use syn::{parse_macro_input, DeriveInput};
19
20#[proc_macro_derive(Serialize, attributes(serde))]
21pub fn derive_serialize(input: TokenStream) -> TokenStream {
22 let input = match ::syn::parse::<DeriveInput>(input) {
::syn::__private::Ok(data) => data,
::syn::__private::Err(err) => {
return ::syn::__private::TokenStream::from(err.to_compile_error());
}
}parse_macro_input!(input as DeriveInput);
23 ser::derive(&input).into()
24}
25
26#[proc_macro_derive(Deserialize, attributes(serde))]
27pub fn derive_deserialize(input: TokenStream) -> TokenStream {
28 let input = match ::syn::parse::<DeriveInput>(input) {
::syn::__private::Ok(data) => data,
::syn::__private::Err(err) => {
return ::syn::__private::TokenStream::from(err.to_compile_error());
}
}parse_macro_input!(input as DeriveInput);
29 de::derive(&input).into()
30}
31
32#[allow(non_camel_case_types)]
33struct private;
34
35impl ToTokens for private {
36 fn to_tokens(&self, tokens: &mut proc_macro2::TokenStream) {
37 tokens.append(Ident::new(
38 "__private43"concat!("__private", env!("CARGO_PKG_VERSION_PATCH")),
39 Span::call_site(),
40 ));
41 }
42}