Skip to content

Commit

Permalink
Merge pull request #2592 from dtolnay/remotenonexhaustive
Browse files Browse the repository at this point in the history
Fix "cannot move out of *self which is behind a shared reference"
  • Loading branch information
dtolnay authored Aug 21, 2023
2 parents d593215 + 1f8c8ad commit 8b196ea
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 4 deletions.
4 changes: 2 additions & 2 deletions serde_derive/src/ser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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))),
});
}

Expand Down
12 changes: 10 additions & 2 deletions test_suite/tests/test_remote.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ struct Test {
enum_concrete: remote::EnumGeneric<u8>,

#[serde(with = "ErrorKindDef")]
io_error_kind: std::io::ErrorKind,
io_error_kind: ErrorKind,
}

#[derive(Serialize, Deserialize)]
Expand Down Expand Up @@ -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,
Expand Down

0 comments on commit 8b196ea

Please sign in to comment.