From 0dac13e4db4d2ca947fe6ba9963879d00217bce5 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 11 Dec 2017 20:59:54 -0800 Subject: [PATCH] Resolve conflict with pr 1115 --- serde_derive/src/de.rs | 25 +++++++++++++++++++++++++ test_suite/tests/test_de.rs | 6 ++++++ 2 files changed, 31 insertions(+) diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 6425d4e1..dbe5a193 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -673,7 +673,32 @@ fn deserialize_from_seq( } }); + let this = ¶ms.this; + let (_, ty_generics, _) = params.generics.split_for_impl(); + let let_default = match *cattrs.default() { + attr::Default::Default => { + Some( + quote!( + let __default: #this #ty_generics = _serde::export::Default::default(); + ), + ) + } + attr::Default::Path(ref path) => { + Some( + quote!( + let __default: #this #ty_generics = #path(); + ), + ) + } + attr::Default::None => { + // We don't need the default value, to prevent an unused variable warning + // we'll leave the line empty. + None + } + }; + quote_block! { + #let_default #(#write_values)* _serde::export::Ok(()) } diff --git a/test_suite/tests/test_de.rs b/test_suite/tests/test_de.rs index 4c801d62..58bcf464 100644 --- a/test_suite/tests/test_de.rs +++ b/test_suite/tests/test_de.rs @@ -86,6 +86,12 @@ struct StructSkipDefault { #[serde(skip_deserializing)] a: i32, } +#[derive(PartialEq, Debug, Deserialize)] +#[serde(default)] +struct StructSkipDefaultGeneric { + #[serde(skip_deserializing)] t: T, +} + impl Default for StructSkipDefault { fn default() -> Self { StructSkipDefault {