Skip to content

Commit e4238d4

Browse files
committed
add #[allow(deprecated)] to derive implementations
Allow deprecated in the `Serialize`/`Deserialize` derive implementations. This allows you to deprecate structs, enums, struct fields, or enum variants and not get compiler warnings/errors about use of deprecated thing. Resolves #2195
1 parent 930401b commit e4238d4

File tree

3 files changed

+39
-0
lines changed

3 files changed

+39
-0
lines changed

serde_derive/src/de.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ pub fn expand_derive_deserialize(input: &mut syn::DeriveInput) -> syn::Result<To
3434
let used = pretend::pretend_used(&cont, params.is_packed);
3535
quote! {
3636
#[automatically_derived]
37+
#[allow(deprecated)]
3738
impl #de_impl_generics #ident #ty_generics #where_clause {
3839
#vis fn deserialize<__D>(__deserializer: __D) -> #serde::__private::Result<#remote #ty_generics, __D::Error>
3940
where
@@ -49,6 +50,7 @@ pub fn expand_derive_deserialize(input: &mut syn::DeriveInput) -> syn::Result<To
4950

5051
quote! {
5152
#[automatically_derived]
53+
#[allow(deprecated)]
5254
impl #de_impl_generics #serde::Deserialize<#delife> for #ident #ty_generics #where_clause {
5355
fn deserialize<__D>(__deserializer: __D) -> #serde::__private::Result<Self, __D::Error>
5456
where

serde_derive/src/ser.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ pub fn expand_derive_serialize(input: &mut syn::DeriveInput) -> syn::Result<Toke
3030
let used = pretend::pretend_used(&cont, params.is_packed);
3131
quote! {
3232
#[automatically_derived]
33+
#[allow(deprecated)]
3334
impl #impl_generics #ident #ty_generics #where_clause {
3435
#vis fn serialize<__S>(__self: &#remote #ty_generics, __serializer: __S) -> #serde::__private::Result<__S::Ok, __S::Error>
3536
where
@@ -43,6 +44,7 @@ pub fn expand_derive_serialize(input: &mut syn::DeriveInput) -> syn::Result<Toke
4344
} else {
4445
quote! {
4546
#[automatically_derived]
47+
#[allow(deprecated)]
4648
impl #impl_generics #serde::Serialize for #ident #ty_generics #where_clause {
4749
fn serialize<__S>(&self, __serializer: __S) -> #serde::__private::Result<__S::Ok, __S::Error>
4850
where

test_suite/tests/deprecated.rs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#![deny(deprecated)]
2+
#![allow(dead_code)]
3+
4+
use serde_derive::{Deserialize, Serialize};
5+
6+
/// deprecated enum
7+
#[derive(Serialize, Deserialize)]
8+
#[deprecated]
9+
enum E1 {
10+
A,
11+
B,
12+
}
13+
14+
/// deprecated struct
15+
#[derive(Serialize, Deserialize)]
16+
#[deprecated]
17+
struct S1 {
18+
a: bool,
19+
}
20+
21+
/// deprecated enum variant
22+
#[derive(Serialize, Deserialize)]
23+
enum E2 {
24+
A,
25+
#[deprecated]
26+
B,
27+
}
28+
29+
/// deprecated struct field
30+
#[derive(Serialize, Deserialize)]
31+
#[deprecated]
32+
struct S2 {
33+
#[deprecated]
34+
a: bool,
35+
}

0 commit comments

Comments
 (0)