diff options
author | Joel Galenson <jgalenson@google.com> | 2021-09-22 11:20:25 -0700 |
---|---|---|
committer | Joel Galenson <jgalenson@google.com> | 2021-09-22 11:20:25 -0700 |
commit | 9c556b449f92db7ed17932f3cc5b196df5506230 (patch) | |
tree | 4811788d84fe11a9bd6cb858921536d9c641037a /src | |
parent | 5e711959dc7df2e7cddae994df228590b15a2919 (diff) | |
download | serde_json-9c556b449f92db7ed17932f3cc5b196df5506230.tar.gz |
Upgrade rust/crates/serde_json to 1.0.68
Test: make
Change-Id: I163656f29a44dfb543dd7da8c5ad682b714b8e03
Diffstat (limited to 'src')
-rw-r--r-- | src/de.rs | 4 | ||||
-rw-r--r-- | src/lib.rs | 2 | ||||
-rw-r--r-- | src/map.rs | 1 | ||||
-rw-r--r-- | src/value/de.rs | 120 |
4 files changed, 16 insertions, 111 deletions
@@ -434,8 +434,8 @@ impl<'de, R: Read<'de>> Deserializer<R> { } else { let neg = (significand as i64).wrapping_neg(); - // Convert into a float if we underflow. - if neg > 0 { + // Convert into a float if we underflow, or on `-0`. + if neg >= 0 { ParserNumber::F64(-(significand as f64)) } else { ParserNumber::I64(neg) @@ -300,7 +300,7 @@ //! [macro]: https://docs.serde.rs/serde_json/macro.json.html //! [`serde-json-core`]: https://github.com/rust-embedded-community/serde-json-core -#![doc(html_root_url = "https://docs.rs/serde_json/1.0.66")] +#![doc(html_root_url = "https://docs.rs/serde_json/1.0.68")] #![deny(clippy::all, clippy::pedantic)] // Ignored clippy lints #![allow( @@ -251,6 +251,7 @@ impl Map<String, Value> { } } +#[allow(clippy::derivable_impls)] // clippy bug: https://github.com/rust-lang/rust-clippy/issues/7655 impl Default for Map<String, Value> { #[inline] fn default() -> Self { diff --git a/src/value/de.rs b/src/value/de.rs index a66d692..24ca826 100644 --- a/src/value/de.rs +++ b/src/value/de.rs @@ -512,7 +512,11 @@ impl<'de> VariantAccess<'de> for VariantDeserializer { { match self.value { Some(Value::Array(v)) => { - serde::Deserializer::deserialize_any(SeqDeserializer::new(v), visitor) + if v.is_empty() { + visitor.visit_unit() + } else { + visit_array(v, visitor) + } } Some(other) => Err(serde::de::Error::invalid_type( other.unexpected(), @@ -534,9 +538,7 @@ impl<'de> VariantAccess<'de> for VariantDeserializer { V: Visitor<'de>, { match self.value { - Some(Value::Object(v)) => { - serde::Deserializer::deserialize_any(MapDeserializer::new(v), visitor) - } + Some(Value::Object(v)) => visit_object(v, visitor), Some(other) => Err(serde::de::Error::invalid_type( other.unexpected(), &"struct variant", @@ -561,38 +563,6 @@ impl SeqDeserializer { } } -impl<'de> serde::Deserializer<'de> for SeqDeserializer { - type Error = Error; - - #[inline] - fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Error> - where - V: Visitor<'de>, - { - let len = self.iter.len(); - if len == 0 { - visitor.visit_unit() - } else { - let ret = tri!(visitor.visit_seq(&mut self)); - let remaining = self.iter.len(); - if remaining == 0 { - Ok(ret) - } else { - Err(serde::de::Error::invalid_length( - len, - &"fewer elements in array", - )) - } - } - } - - forward_to_deserialize_any! { - bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct newtype_struct seq tuple - tuple_struct map struct enum identifier ignored_any - } -} - impl<'de> SeqAccess<'de> for SeqDeserializer { type Error = Error; @@ -665,24 +635,6 @@ impl<'de> MapAccess<'de> for MapDeserializer { } } -impl<'de> serde::Deserializer<'de> for MapDeserializer { - type Error = Error; - - #[inline] - fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error> - where - V: Visitor<'de>, - { - visitor.visit_map(self) - } - - forward_to_deserialize_any! { - bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct newtype_struct seq tuple - tuple_struct map struct enum identifier ignored_any - } -} - macro_rules! deserialize_value_ref_number { ($method:ident) => { #[cfg(not(feature = "arbitrary_precision"))] @@ -1043,7 +995,11 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> { { match self.value { Some(&Value::Array(ref v)) => { - serde::Deserializer::deserialize_any(SeqRefDeserializer::new(v), visitor) + if v.is_empty() { + visitor.visit_unit() + } else { + visit_array_ref(v, visitor) + } } Some(other) => Err(serde::de::Error::invalid_type( other.unexpected(), @@ -1065,9 +1021,7 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> { V: Visitor<'de>, { match self.value { - Some(&Value::Object(ref v)) => { - serde::Deserializer::deserialize_any(MapRefDeserializer::new(v), visitor) - } + Some(&Value::Object(ref v)) => visit_object_ref(v, visitor), Some(other) => Err(serde::de::Error::invalid_type( other.unexpected(), &"struct variant", @@ -1090,38 +1044,6 @@ impl<'de> SeqRefDeserializer<'de> { } } -impl<'de> serde::Deserializer<'de> for SeqRefDeserializer<'de> { - type Error = Error; - - #[inline] - fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Error> - where - V: Visitor<'de>, - { - let len = self.iter.len(); - if len == 0 { - visitor.visit_unit() - } else { - let ret = tri!(visitor.visit_seq(&mut self)); - let remaining = self.iter.len(); - if remaining == 0 { - Ok(ret) - } else { - Err(serde::de::Error::invalid_length( - len, - &"fewer elements in array", - )) - } - } - } - - forward_to_deserialize_any! { - bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct newtype_struct seq tuple - tuple_struct map struct enum identifier ignored_any - } -} - impl<'de> SeqAccess<'de> for SeqRefDeserializer<'de> { type Error = Error; @@ -1194,24 +1116,6 @@ impl<'de> MapAccess<'de> for MapRefDeserializer<'de> { } } -impl<'de> serde::Deserializer<'de> for MapRefDeserializer<'de> { - type Error = Error; - - #[inline] - fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error> - where - V: Visitor<'de>, - { - visitor.visit_map(self) - } - - forward_to_deserialize_any! { - bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string - bytes byte_buf option unit unit_struct newtype_struct seq tuple - tuple_struct map struct enum identifier ignored_any - } -} - struct MapKeyDeserializer<'de> { key: Cow<'de, str>, } |