diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 20ccb696..03e265af 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -23,15 +23,14 @@ pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result(__deserializer: __D) -> _serde::export::Result<#remote #ty_generics, __D::Error> + impl #de_impl_generics #ident #ty_generics #where_clause { + fn deserialize<__D>(__deserializer: __D) -> _serde::export::Result<#remote #ty_generics, __D::Error> where __D: _serde::Deserializer<'de> { #body @@ -39,7 +38,6 @@ pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result for #ident #ty_generics #where_clause { diff --git a/test_suite/tests/test_gen.rs b/test_suite/tests/test_gen.rs index 2f3d6299..a82801b9 100644 --- a/test_suite/tests/test_gen.rs +++ b/test_suite/tests/test_gen.rs @@ -330,6 +330,34 @@ fn test_gen() { struct EmptyArray { empty: [X; 0], } + + enum Or { + A(A), + B(B), + } + + #[derive(Serialize, Deserialize)] + #[serde(untagged, remote = "Or")] + enum OrDef { + #[allow(dead_code)] + A(A), + #[allow(dead_code)] + B(B), + } + + struct Str<'a>(&'a str); + + #[derive(Serialize, Deserialize)] + #[serde(remote = "Str")] + struct StrDef<'a>(&'a str); + + #[derive(Serialize, Deserialize)] + struct Remote<'a> { + #[serde(with = "OrDef")] + or: Or, + #[serde(borrow, with = "StrDef")] + s: Str<'a>, + } } //////////////////////////////////////////////////////////////////////////