From 45c45e87bf38f2d5fbd01d04468666fce0b02562 Mon Sep 17 00:00:00 2001 From: Josh Triplett Date: Thu, 10 Sep 2020 23:24:33 -0700 Subject: [PATCH] Fix hand-written enum variant deserializations to allow u64 discriminant Automatically generated enum variant deserializers allowed any integer type as the discriminant, but the hand-written ones for specific enum types such as Result or IpAddr only allowed types up to u32. This broke some non-human-readable deserializers for these enums, with deserializers that emit any integer type as a u64. Switch the visit_u32 methods to visit_u64 methods to allow discriminants to have any size up to a u64. --- serde/src/de/impls.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index e460a40d..ae4f9dc8 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -1313,7 +1313,7 @@ macro_rules! variant_identifier { formatter.write_str($expecting_message) } - fn visit_u32(self, value: u32) -> Result + fn visit_u64(self, value: u64) -> Result where E: Error, { @@ -1321,7 +1321,7 @@ macro_rules! variant_identifier { $( $index => Ok($name_kind :: $variant), )* - _ => Err(Error::invalid_value(Unexpected::Unsigned(value as u64), &self),), + _ => Err(Error::invalid_value(Unexpected::Unsigned(value), &self),), } } @@ -2326,7 +2326,7 @@ where formatter.write_str("`Unbounded`, `Included` or `Excluded`") } - fn visit_u32(self, value: u32) -> Result + fn visit_u64(self, value: u64) -> Result where E: Error, { @@ -2335,7 +2335,7 @@ where 1 => Ok(Field::Included), 2 => Ok(Field::Excluded), _ => Err(Error::invalid_value( - Unexpected::Unsigned(value as u64), + Unexpected::Unsigned(value), &self, )), } @@ -2492,7 +2492,7 @@ where formatter.write_str("`Ok` or `Err`") } - fn visit_u32(self, value: u32) -> Result + fn visit_u64(self, value: u64) -> Result where E: Error, { @@ -2500,7 +2500,7 @@ where 0 => Ok(Field::Ok), 1 => Ok(Field::Err), _ => Err(Error::invalid_value( - Unexpected::Unsigned(value as u64), + Unexpected::Unsigned(value), &self, )), }