mirror of
https://github.com/serde-rs/json.git
synced 2026-01-20 23:55:46 +00:00
Merge pull request #793 from dtolnay/valuede
Delete several other superfluous Deserializer impls
This commit is contained in:
commit
604d5cf6fe
120
src/value/de.rs
120
src/value/de.rs
@ -512,7 +512,22 @@ impl<'de> VariantAccess<'de> for VariantDeserializer {
|
||||
{
|
||||
match self.value {
|
||||
Some(Value::Array(v)) => {
|
||||
serde::Deserializer::deserialize_any(SeqDeserializer::new(v), visitor)
|
||||
let len = v.len();
|
||||
if len == 0 {
|
||||
visitor.visit_unit()
|
||||
} else {
|
||||
let mut seq = SeqDeserializer::new(v);
|
||||
let ret = tri!(visitor.visit_seq(&mut seq));
|
||||
let remaining = seq.iter.len();
|
||||
if remaining == 0 {
|
||||
Ok(ret)
|
||||
} else {
|
||||
Err(serde::de::Error::invalid_length(
|
||||
len,
|
||||
&"fewer elements in array",
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
Some(other) => Err(serde::de::Error::invalid_type(
|
||||
other.unexpected(),
|
||||
@ -559,38 +574,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;
|
||||
|
||||
@ -1023,7 +1006,22 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> {
|
||||
{
|
||||
match self.value {
|
||||
Some(&Value::Array(ref v)) => {
|
||||
serde::Deserializer::deserialize_any(SeqRefDeserializer::new(v), visitor)
|
||||
let len = v.len();
|
||||
if len == 0 {
|
||||
visitor.visit_unit()
|
||||
} else {
|
||||
let mut seq = SeqRefDeserializer::new(v);
|
||||
let ret = tri!(visitor.visit_seq(&mut seq));
|
||||
let remaining = seq.iter.len();
|
||||
if remaining == 0 {
|
||||
Ok(ret)
|
||||
} else {
|
||||
Err(serde::de::Error::invalid_length(
|
||||
len,
|
||||
&"fewer elements in array",
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
Some(other) => Err(serde::de::Error::invalid_type(
|
||||
other.unexpected(),
|
||||
@ -1045,9 +1043,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)) => visitor.visit_map(MapRefDeserializer::new(v)),
|
||||
Some(other) => Err(serde::de::Error::invalid_type(
|
||||
other.unexpected(),
|
||||
&"struct variant",
|
||||
@ -1070,38 +1066,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;
|
||||
|
||||
@ -1174,24 +1138,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>,
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user