From 16d1265e17228384258abe7e05ddc2baa0cc899d Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 19 May 2018 17:14:20 -0700 Subject: [PATCH] Fix generated code for deserializing untagged newtype variant --- serde_derive/src/de.rs | 6 ++---- test_suite/tests/test_gen.rs | 10 ++++++++++ 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 40a5d105..3cce5f07 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -1802,10 +1802,8 @@ fn deserialize_untagged_newtype_variant( } Some(path) => { quote_block! { - let __value: #field_ty = _serde::export::Result::map( - #path(#deserializer), - #this::#variant_ident); - __value + let __value: _serde::export::Result<#field_ty, _> = #path(#deserializer); + _serde::export::Result::map(__value, #this::#variant_ident) } } } diff --git a/test_suite/tests/test_gen.rs b/test_suite/tests/test_gen.rs index 7888f2d8..ffb73210 100644 --- a/test_suite/tests/test_gen.rs +++ b/test_suite/tests/test_gen.rs @@ -643,6 +643,16 @@ fn test_gen() { struct ImpliciltyBorrowedOption<'a> { option: std::option::Option<&'a str>, } + + #[derive(Serialize, Deserialize)] + #[serde(untagged)] + enum UntaggedNewtypeVariantWith { + Newtype( + #[serde(serialize_with = "ser_x")] + #[serde(deserialize_with = "de_x")] + X, + ), + } } //////////////////////////////////////////////////////////////////////////