Merge pull request #2592 from dtolnay/remotenonexhaustive

Fix "cannot move out of *self which is behind a shared reference"
This commit is contained in:
David Tolnay 2023-08-20 21:40:37 -07:00 committed by GitHub
commit 8b196ea1c8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 12 additions and 4 deletions

View File

@ -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))),
});
}

View File

@ -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)]
@ -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,