Skip to content

Commit 604d5cf

Browse files
authored
Merge pull request #793 from dtolnay/valuede
Delete several other superfluous Deserializer impls
2 parents ac9078e + cdc2ad3 commit 604d5cf

File tree

1 file changed

+33
-87
lines changed

1 file changed

+33
-87
lines changed

src/value/de.rs

+33-87
Original file line numberDiff line numberDiff line change
@@ -512,7 +512,22 @@ impl<'de> VariantAccess<'de> for VariantDeserializer {
512512
{
513513
match self.value {
514514
Some(Value::Array(v)) => {
515-
serde::Deserializer::deserialize_any(SeqDeserializer::new(v), visitor)
515+
let len = v.len();
516+
if len == 0 {
517+
visitor.visit_unit()
518+
} else {
519+
let mut seq = SeqDeserializer::new(v);
520+
let ret = tri!(visitor.visit_seq(&mut seq));
521+
let remaining = seq.iter.len();
522+
if remaining == 0 {
523+
Ok(ret)
524+
} else {
525+
Err(serde::de::Error::invalid_length(
526+
len,
527+
&"fewer elements in array",
528+
))
529+
}
530+
}
516531
}
517532
Some(other) => Err(serde::de::Error::invalid_type(
518533
other.unexpected(),
@@ -559,38 +574,6 @@ impl SeqDeserializer {
559574
}
560575
}
561576

562-
impl<'de> serde::Deserializer<'de> for SeqDeserializer {
563-
type Error = Error;
564-
565-
#[inline]
566-
fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Error>
567-
where
568-
V: Visitor<'de>,
569-
{
570-
let len = self.iter.len();
571-
if len == 0 {
572-
visitor.visit_unit()
573-
} else {
574-
let ret = tri!(visitor.visit_seq(&mut self));
575-
let remaining = self.iter.len();
576-
if remaining == 0 {
577-
Ok(ret)
578-
} else {
579-
Err(serde::de::Error::invalid_length(
580-
len,
581-
&"fewer elements in array",
582-
))
583-
}
584-
}
585-
}
586-
587-
forward_to_deserialize_any! {
588-
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
589-
bytes byte_buf option unit unit_struct newtype_struct seq tuple
590-
tuple_struct map struct enum identifier ignored_any
591-
}
592-
}
593-
594577
impl<'de> SeqAccess<'de> for SeqDeserializer {
595578
type Error = Error;
596579

@@ -1023,7 +1006,22 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> {
10231006
{
10241007
match self.value {
10251008
Some(&Value::Array(ref v)) => {
1026-
serde::Deserializer::deserialize_any(SeqRefDeserializer::new(v), visitor)
1009+
let len = v.len();
1010+
if len == 0 {
1011+
visitor.visit_unit()
1012+
} else {
1013+
let mut seq = SeqRefDeserializer::new(v);
1014+
let ret = tri!(visitor.visit_seq(&mut seq));
1015+
let remaining = seq.iter.len();
1016+
if remaining == 0 {
1017+
Ok(ret)
1018+
} else {
1019+
Err(serde::de::Error::invalid_length(
1020+
len,
1021+
&"fewer elements in array",
1022+
))
1023+
}
1024+
}
10271025
}
10281026
Some(other) => Err(serde::de::Error::invalid_type(
10291027
other.unexpected(),
@@ -1045,9 +1043,7 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> {
10451043
V: Visitor<'de>,
10461044
{
10471045
match self.value {
1048-
Some(&Value::Object(ref v)) => {
1049-
serde::Deserializer::deserialize_any(MapRefDeserializer::new(v), visitor)
1050-
}
1046+
Some(&Value::Object(ref v)) => visitor.visit_map(MapRefDeserializer::new(v)),
10511047
Some(other) => Err(serde::de::Error::invalid_type(
10521048
other.unexpected(),
10531049
&"struct variant",
@@ -1070,38 +1066,6 @@ impl<'de> SeqRefDeserializer<'de> {
10701066
}
10711067
}
10721068

1073-
impl<'de> serde::Deserializer<'de> for SeqRefDeserializer<'de> {
1074-
type Error = Error;
1075-
1076-
#[inline]
1077-
fn deserialize_any<V>(mut self, visitor: V) -> Result<V::Value, Error>
1078-
where
1079-
V: Visitor<'de>,
1080-
{
1081-
let len = self.iter.len();
1082-
if len == 0 {
1083-
visitor.visit_unit()
1084-
} else {
1085-
let ret = tri!(visitor.visit_seq(&mut self));
1086-
let remaining = self.iter.len();
1087-
if remaining == 0 {
1088-
Ok(ret)
1089-
} else {
1090-
Err(serde::de::Error::invalid_length(
1091-
len,
1092-
&"fewer elements in array",
1093-
))
1094-
}
1095-
}
1096-
}
1097-
1098-
forward_to_deserialize_any! {
1099-
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1100-
bytes byte_buf option unit unit_struct newtype_struct seq tuple
1101-
tuple_struct map struct enum identifier ignored_any
1102-
}
1103-
}
1104-
11051069
impl<'de> SeqAccess<'de> for SeqRefDeserializer<'de> {
11061070
type Error = Error;
11071071

@@ -1174,24 +1138,6 @@ impl<'de> MapAccess<'de> for MapRefDeserializer<'de> {
11741138
}
11751139
}
11761140

1177-
impl<'de> serde::Deserializer<'de> for MapRefDeserializer<'de> {
1178-
type Error = Error;
1179-
1180-
#[inline]
1181-
fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Error>
1182-
where
1183-
V: Visitor<'de>,
1184-
{
1185-
visitor.visit_map(self)
1186-
}
1187-
1188-
forward_to_deserialize_any! {
1189-
bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
1190-
bytes byte_buf option unit unit_struct newtype_struct seq tuple
1191-
tuple_struct map struct enum identifier ignored_any
1192-
}
1193-
}
1194-
11951141
struct MapKeyDeserializer<'de> {
11961142
key: Cow<'de, str>,
11971143
}

0 commit comments

Comments
 (0)