mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-15 07:21:01 +00:00
Fix deserialize_with on a struct variant with one field
This commit is contained in:
@@ -2598,6 +2598,14 @@ fn wrap_deserialize_variant_with(
|
|||||||
})
|
})
|
||||||
});
|
});
|
||||||
let unwrap_fn = match variant.style {
|
let unwrap_fn = match variant.style {
|
||||||
|
Style::Struct if variant.fields.len() == 1 => {
|
||||||
|
let field_ident = variant.fields[0].ident.unwrap();
|
||||||
|
quote!({
|
||||||
|
|__wrap| {
|
||||||
|
#this::#variant_ident { #field_ident: __wrap.value }
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
Style::Struct => {
|
Style::Struct => {
|
||||||
let field_idents = variant
|
let field_idents = variant
|
||||||
.fields
|
.fields
|
||||||
|
|||||||
@@ -391,9 +391,6 @@ fn test_gen() {
|
|||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
enum ExternallyTaggedVariantWith {
|
enum ExternallyTaggedVariantWith {
|
||||||
#[allow(dead_code)]
|
|
||||||
Normal { f1: String },
|
|
||||||
|
|
||||||
#[serde(serialize_with = "ser_x")]
|
#[serde(serialize_with = "ser_x")]
|
||||||
#[serde(deserialize_with = "de_x")]
|
#[serde(deserialize_with = "de_x")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -404,6 +401,11 @@ fn test_gen() {
|
|||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
Tuple(String, u8),
|
Tuple(String, u8),
|
||||||
|
|
||||||
|
#[serde(serialize_with = "ser_x")]
|
||||||
|
#[serde(deserialize_with = "de_x")]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
Struct1 { x: X },
|
||||||
|
|
||||||
#[serde(serialize_with = "serialize_some_other_variant")]
|
#[serde(serialize_with = "serialize_some_other_variant")]
|
||||||
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -419,14 +421,16 @@ fn test_gen() {
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
#[serde(tag = "t")]
|
#[serde(tag = "t")]
|
||||||
enum InternallyTaggedVariantWith {
|
enum InternallyTaggedVariantWith {
|
||||||
#[allow(dead_code)]
|
|
||||||
Normal { f1: String },
|
|
||||||
|
|
||||||
#[serde(serialize_with = "ser_x")]
|
#[serde(serialize_with = "ser_x")]
|
||||||
#[serde(deserialize_with = "de_x")]
|
#[serde(deserialize_with = "de_x")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
Newtype(X),
|
Newtype(X),
|
||||||
|
|
||||||
|
#[serde(serialize_with = "ser_x")]
|
||||||
|
#[serde(deserialize_with = "de_x")]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
Struct1 { x: X },
|
||||||
|
|
||||||
#[serde(serialize_with = "serialize_some_other_variant")]
|
#[serde(serialize_with = "serialize_some_other_variant")]
|
||||||
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -442,9 +446,6 @@ fn test_gen() {
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
#[serde(tag = "t", content = "c")]
|
#[serde(tag = "t", content = "c")]
|
||||||
enum AdjacentlyTaggedVariantWith {
|
enum AdjacentlyTaggedVariantWith {
|
||||||
#[allow(dead_code)]
|
|
||||||
Normal { f1: String },
|
|
||||||
|
|
||||||
#[serde(serialize_with = "ser_x")]
|
#[serde(serialize_with = "ser_x")]
|
||||||
#[serde(deserialize_with = "de_x")]
|
#[serde(deserialize_with = "de_x")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -455,6 +456,11 @@ fn test_gen() {
|
|||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
Tuple(String, u8),
|
Tuple(String, u8),
|
||||||
|
|
||||||
|
#[serde(serialize_with = "ser_x")]
|
||||||
|
#[serde(deserialize_with = "de_x")]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
Struct1 { x: X },
|
||||||
|
|
||||||
#[serde(serialize_with = "serialize_some_other_variant")]
|
#[serde(serialize_with = "serialize_some_other_variant")]
|
||||||
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -470,9 +476,6 @@ fn test_gen() {
|
|||||||
#[derive(Serialize, Deserialize)]
|
#[derive(Serialize, Deserialize)]
|
||||||
#[serde(untagged)]
|
#[serde(untagged)]
|
||||||
enum UntaggedVariantWith {
|
enum UntaggedVariantWith {
|
||||||
#[allow(dead_code)]
|
|
||||||
Normal { f1: String },
|
|
||||||
|
|
||||||
#[serde(serialize_with = "ser_x")]
|
#[serde(serialize_with = "ser_x")]
|
||||||
#[serde(deserialize_with = "de_x")]
|
#[serde(deserialize_with = "de_x")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
@@ -483,6 +486,11 @@ fn test_gen() {
|
|||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
Tuple(String, u8),
|
Tuple(String, u8),
|
||||||
|
|
||||||
|
#[serde(serialize_with = "ser_x")]
|
||||||
|
#[serde(deserialize_with = "de_x")]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
Struct1 { x: X },
|
||||||
|
|
||||||
#[serde(serialize_with = "serialize_some_other_variant")]
|
#[serde(serialize_with = "serialize_some_other_variant")]
|
||||||
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
#[serde(deserialize_with = "deserialize_some_other_variant")]
|
||||||
#[allow(dead_code)]
|
#[allow(dead_code)]
|
||||||
|
|||||||
Reference in New Issue
Block a user