From 5bf9f353c3a59aee6346756d14a4d57129a99768 Mon Sep 17 00:00:00 2001 From: Bryant Luk Date: Wed, 1 Jan 2025 11:03:59 -0600 Subject: [PATCH] Forward deserialize integer methods to deserialize_any - Remove unnecessary code duplication - Even though the hint is for an integer, the code invoked is the same --- src/de.rs | 65 +------------------------------------------------------ 1 file changed, 1 insertion(+), 64 deletions(-) diff --git a/src/de.rs b/src/de.rs index 4d98d6f..b779c14 100644 --- a/src/de.rs +++ b/src/de.rs @@ -263,30 +263,6 @@ impl<'a> Deserializer> { } } -macro_rules! forward_deserialize_signed_integer { - ($method:ident) => { - #[inline] - fn $method(self, visitor: V) -> Result - where - V: de::Visitor<'de>, - { - self.deserialize_i64(visitor) - } - }; -} - -macro_rules! forward_deserialize_unsigned_integer { - ($method:ident) => { - #[inline] - fn $method(self, visitor: V) -> Result - where - V: de::Visitor<'de>, - { - self.deserialize_u64(visitor) - } - }; -} - impl<'de, R: Read<'de>> de::Deserializer<'de> for &mut Deserializer { type Error = Error; @@ -340,52 +316,13 @@ impl<'de, R: Read<'de>> de::Deserializer<'de> for &mut Deserializer { } forward_to_deserialize_any! { - bool f32 f64 unit unit_struct + bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 unit unit_struct char str string struct enum identifier ignored_any } - forward_deserialize_signed_integer!(deserialize_i8); - forward_deserialize_signed_integer!(deserialize_i16); - forward_deserialize_signed_integer!(deserialize_i32); - - fn deserialize_i64(self, visitor: V) -> Result - where - V: de::Visitor<'de>, - { - match self.parse_peek()? { - b'i' => { - self.parse_next()?; - - let (is_positive, num) = self.parse_integer()?; - if is_positive { - visitor.visit_u64(num) - } else { - use core::convert::TryFrom; - - visitor.visit_i64(-i64::try_from(num).map_err(|_| { - Error::new(ErrorKind::InvalidInteger, self.read.byte_offset()) - })?) - } - } - _ => Err(self.unexpected_type_err(&visitor)?), - } - } - - forward_deserialize_unsigned_integer!(deserialize_u8); - forward_deserialize_unsigned_integer!(deserialize_u16); - forward_deserialize_unsigned_integer!(deserialize_u32); - - fn deserialize_u64(self, visitor: V) -> Result - where - V: de::Visitor<'de>, - { - // The implementation should be the same as i64 for this data model - self.deserialize_i64(visitor) - } - fn deserialize_bytes(self, visitor: V) -> Result where V: de::Visitor<'de>,