diff options
Diffstat (limited to 'third_party/rust/serde_derive/src/dummy.rs')
-rw-r--r-- | third_party/rust/serde_derive/src/dummy.rs | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/third_party/rust/serde_derive/src/dummy.rs b/third_party/rust/serde_derive/src/dummy.rs new file mode 100644 index 0000000000..a02bd37626 --- /dev/null +++ b/third_party/rust/serde_derive/src/dummy.rs @@ -0,0 +1,48 @@ +use proc_macro2::{Ident, TokenStream}; +use quote::format_ident; + +use syn; +use try; + +pub fn wrap_in_const( + serde_path: Option<&syn::Path>, + trait_: &str, + ty: &Ident, + code: TokenStream, +) -> TokenStream { + let try_replacement = try::replacement(); + + let dummy_const = if cfg!(no_underscore_consts) { + format_ident!("_IMPL_{}_FOR_{}", trait_, unraw(ty)) + } else { + format_ident!("_") + }; + + 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)] + const #dummy_const: () = { + #use_serde + #try_replacement + #code + }; + } +} + +#[allow(deprecated)] +fn unraw(ident: &Ident) -> String { + // str::trim_start_matches was added in 1.30, trim_left_matches deprecated + // in 1.33. We currently support rustc back to 1.15 so we need to continue + // to use the deprecated one. + ident.to_string().trim_left_matches("r#").to_owned() +} |