diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 03e265af..647281c0 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -28,9 +28,10 @@ pub fn expand_derive_deserialize(input: &syn::DeriveInput) -> Result(__deserializer: __D) -> _serde::export::Result<#remote #ty_generics, __D::Error> + #vis fn deserialize<__D>(__deserializer: __D) -> _serde::export::Result<#remote #ty_generics, __D::Error> where __D: _serde::Deserializer<'de> { #body diff --git a/serde_derive/src/ser.rs b/serde_derive/src/ser.rs index 66603d8d..9be9bddc 100644 --- a/serde_derive/src/ser.rs +++ b/serde_derive/src/ser.rs @@ -29,9 +29,10 @@ pub fn expand_derive_serialize(input: &syn::DeriveInput) -> Result(__self: &#remote #ty_generics, __serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error> + #vis fn serialize<__S>(__self: &#remote #ty_generics, __serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error> where __S: _serde::Serializer { #body diff --git a/test_suite/tests/test_gen.rs b/test_suite/tests/test_gen.rs index a82801b9..5d708014 100644 --- a/test_suite/tests/test_gen.rs +++ b/test_suite/tests/test_gen.rs @@ -358,6 +358,21 @@ fn test_gen() { #[serde(borrow, with = "StrDef")] s: Str<'a>, } + + mod vis { + pub struct S; + + #[derive(Serialize, Deserialize)] + #[serde(remote = "S")] + pub struct SDef; + } + + // This would not work if SDef::serialize / deserialize are private. + #[derive(Serialize, Deserialize)] + struct RemoteVisibility { + #[serde(with = "vis::SDef")] + s: vis::S, + } } //////////////////////////////////////////////////////////////////////////