mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 18:27:54 +00:00
8909fc0c60
Even for a simple data structure that would ordinarily expand to an impl that only refers to the public Serde traits without serde::__private, we still disallow a (renamed) serde_core dependency. This leaves the liberty to new usage of private helpers in such impls over time. For example, similar to the optimization of the standard library's derive(Debug) that introduced debug_struct_field1_finish to improve compile time of derived impls.
32 lines
751 B
Rust
32 lines
751 B
Rust
use proc_macro2::TokenStream;
|
|
use quote::quote;
|
|
|
|
pub fn wrap_in_const(serde_path: Option<&syn::Path>, code: TokenStream) -> TokenStream {
|
|
let use_serde = match serde_path {
|
|
Some(path) => quote! {
|
|
use #path as _serde;
|
|
},
|
|
None => quote! {
|
|
#[allow(unused_extern_crates, clippy::useless_attribute)]
|
|
extern crate serde as _serde;
|
|
},
|
|
};
|
|
|
|
quote! {
|
|
#[doc(hidden)]
|
|
#[allow(
|
|
non_upper_case_globals,
|
|
unused_attributes,
|
|
unused_qualifications,
|
|
clippy::absolute_paths,
|
|
)]
|
|
const _: () = {
|
|
#use_serde
|
|
|
|
_serde::__require_serde_not_serde_core!();
|
|
|
|
#code
|
|
};
|
|
}
|
|
}
|