mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-22 11:28:02 +00:00
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. We only do this if `#[deprecated]` or `#[allow(deprecated)]` exist on the root object or the variants of the root object (if it is an enum). Resolves #2195
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
#![deny(deprecated)]
|
||||
#![allow(dead_code)]
|
||||
|
||||
use serde_derive::{Deserialize, Serialize};
|
||||
|
||||
/// deprecated enum
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[deprecated]
|
||||
enum E1 {
|
||||
A,
|
||||
B,
|
||||
}
|
||||
|
||||
/// deprecated struct
|
||||
#[derive(Serialize, Deserialize)]
|
||||
#[deprecated]
|
||||
struct S1 {
|
||||
a: bool,
|
||||
}
|
||||
|
||||
/// deprecated enum variant
|
||||
#[derive(Serialize, Deserialize)]
|
||||
enum E2 {
|
||||
A,
|
||||
#[deprecated]
|
||||
B,
|
||||
}
|
||||
|
||||
/// deprecated struct field
|
||||
#[derive(Serialize, Deserialize)]
|
||||
struct S2 {
|
||||
#[deprecated]
|
||||
a: bool,
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
#![deny(deprecated)]
|
||||
|
||||
use serde::Deserializer;
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct Struct {
|
||||
#[serde(deserialize_with = "deprecated_with")]
|
||||
pub field: i32,
|
||||
}
|
||||
|
||||
#[deprecated]
|
||||
fn deprecated_with<'de, D>(_deserializer: D) -> Result<i32, D::Error>
|
||||
where
|
||||
D: Deserializer<'de>,
|
||||
{
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,11 @@
|
||||
error: use of deprecated function `deprecated_with`
|
||||
--> tests/ui/deprecated/deprecated_de_with.rs:8:32
|
||||
|
|
||||
8 | #[serde(deserialize_with = "deprecated_with")]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/deprecated/deprecated_de_with.rs:1:9
|
||||
|
|
||||
1 | #![deny(deprecated)]
|
||||
| ^^^^^^^^^^
|
||||
@@ -0,0 +1,20 @@
|
||||
#![deny(deprecated)]
|
||||
|
||||
use serde::Serializer;
|
||||
use serde_derive::Serialize;
|
||||
|
||||
#[derive(Serialize)]
|
||||
pub struct Struct {
|
||||
#[serde(serialize_with = "deprecated_with")]
|
||||
pub field: i32,
|
||||
}
|
||||
|
||||
#[deprecated]
|
||||
fn deprecated_with<S>(_field: &i32, _serializer: S) -> Result<S::Ok, S::Error>
|
||||
where
|
||||
S: Serializer,
|
||||
{
|
||||
unimplemented!()
|
||||
}
|
||||
|
||||
fn main() {}
|
||||
@@ -0,0 +1,11 @@
|
||||
error: use of deprecated function `deprecated_with`
|
||||
--> tests/ui/deprecated/deprecated_ser_with.rs:8:30
|
||||
|
|
||||
8 | #[serde(serialize_with = "deprecated_with")]
|
||||
| ^^^^^^^^^^^^^^^^^
|
||||
|
|
||||
note: the lint level is defined here
|
||||
--> tests/ui/deprecated/deprecated_ser_with.rs:1:9
|
||||
|
|
||||
1 | #![deny(deprecated)]
|
||||
| ^^^^^^^^^^
|
||||
Reference in New Issue
Block a user