diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 196b9bdf..4082545d 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -2598,6 +2598,14 @@ fn wrap_deserialize_variant_with( }) }); 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 => { let field_idents = variant .fields diff --git a/test_suite/tests/test_gen.rs b/test_suite/tests/test_gen.rs index aa5e0c4c..8ed00983 100644 --- a/test_suite/tests/test_gen.rs +++ b/test_suite/tests/test_gen.rs @@ -391,9 +391,6 @@ fn test_gen() { #[derive(Serialize, Deserialize)] enum ExternallyTaggedVariantWith { - #[allow(dead_code)] - Normal { f1: String }, - #[serde(serialize_with = "ser_x")] #[serde(deserialize_with = "de_x")] #[allow(dead_code)] @@ -404,6 +401,11 @@ fn test_gen() { #[allow(dead_code)] 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(deserialize_with = "deserialize_some_other_variant")] #[allow(dead_code)] @@ -419,14 +421,16 @@ fn test_gen() { #[derive(Serialize, Deserialize)] #[serde(tag = "t")] enum InternallyTaggedVariantWith { - #[allow(dead_code)] - Normal { f1: String }, - #[serde(serialize_with = "ser_x")] #[serde(deserialize_with = "de_x")] #[allow(dead_code)] 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(deserialize_with = "deserialize_some_other_variant")] #[allow(dead_code)] @@ -442,9 +446,6 @@ fn test_gen() { #[derive(Serialize, Deserialize)] #[serde(tag = "t", content = "c")] enum AdjacentlyTaggedVariantWith { - #[allow(dead_code)] - Normal { f1: String }, - #[serde(serialize_with = "ser_x")] #[serde(deserialize_with = "de_x")] #[allow(dead_code)] @@ -455,6 +456,11 @@ fn test_gen() { #[allow(dead_code)] 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(deserialize_with = "deserialize_some_other_variant")] #[allow(dead_code)] @@ -470,9 +476,6 @@ fn test_gen() { #[derive(Serialize, Deserialize)] #[serde(untagged)] enum UntaggedVariantWith { - #[allow(dead_code)] - Normal { f1: String }, - #[serde(serialize_with = "ser_x")] #[serde(deserialize_with = "de_x")] #[allow(dead_code)] @@ -483,6 +486,11 @@ fn test_gen() { #[allow(dead_code)] 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(deserialize_with = "deserialize_some_other_variant")] #[allow(dead_code)]