diff --git a/serde_derive/src/ser.rs b/serde_derive/src/ser.rs index 1f67f0430..a2cab263c 100644 --- a/serde_derive/src/ser.rs +++ b/serde_derive/src/ser.rs @@ -409,9 +409,9 @@ fn serialize_enum(params: &Parameters, variants: &[Variant], cattrs: &attr::Cont }) .collect(); - if cattrs.non_exhaustive() { + if cattrs.remote().is_some() && cattrs.non_exhaustive() { arms.push(quote! { - unrecognized => _serde::__private::Err(_serde::ser::Error::custom(_serde::__private::ser::CannotSerializeVariant(unrecognized))), + ref unrecognized => _serde::__private::Err(_serde::ser::Error::custom(_serde::__private::ser::CannotSerializeVariant(unrecognized))), }); } diff --git a/test_suite/tests/test_remote.rs b/test_suite/tests/test_remote.rs index 7069cf9b6..c1f152eb8 100644 --- a/test_suite/tests/test_remote.rs +++ b/test_suite/tests/test_remote.rs @@ -127,7 +127,7 @@ struct Test { enum_concrete: remote::EnumGeneric, #[serde(with = "ErrorKindDef")] - io_error_kind: std::io::ErrorKind, + io_error_kind: ErrorKind, } #[derive(Serialize, Deserialize)] @@ -200,8 +200,16 @@ enum EnumConcrete { Variant(u8), } +#[derive(Debug)] +enum ErrorKind { + NotFound, + PermissionDenied, + #[allow(dead_code)] + ConnectionRefused, +} + #[derive(Serialize, Deserialize)] -#[serde(remote = "std::io::ErrorKind")] +#[serde(remote = "ErrorKind")] #[non_exhaustive] enum ErrorKindDef { NotFound,