@@ -512,7 +512,22 @@ impl<'de> VariantAccess<'de> for VariantDeserializer {
512
512
{
513
513
match self . value {
514
514
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
+ }
516
531
}
517
532
Some ( other) => Err ( serde:: de:: Error :: invalid_type (
518
533
other. unexpected ( ) ,
@@ -559,38 +574,6 @@ impl SeqDeserializer {
559
574
}
560
575
}
561
576
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
-
594
577
impl < ' de > SeqAccess < ' de > for SeqDeserializer {
595
578
type Error = Error ;
596
579
@@ -1023,7 +1006,22 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> {
1023
1006
{
1024
1007
match self . value {
1025
1008
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
+ }
1027
1025
}
1028
1026
Some ( other) => Err ( serde:: de:: Error :: invalid_type (
1029
1027
other. unexpected ( ) ,
@@ -1045,9 +1043,7 @@ impl<'de> VariantAccess<'de> for VariantRefDeserializer<'de> {
1045
1043
V : Visitor < ' de > ,
1046
1044
{
1047
1045
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) ) ,
1051
1047
Some ( other) => Err ( serde:: de:: Error :: invalid_type (
1052
1048
other. unexpected ( ) ,
1053
1049
& "struct variant" ,
@@ -1070,38 +1066,6 @@ impl<'de> SeqRefDeserializer<'de> {
1070
1066
}
1071
1067
}
1072
1068
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
-
1105
1069
impl < ' de > SeqAccess < ' de > for SeqRefDeserializer < ' de > {
1106
1070
type Error = Error ;
1107
1071
@@ -1174,24 +1138,6 @@ impl<'de> MapAccess<'de> for MapRefDeserializer<'de> {
1174
1138
}
1175
1139
}
1176
1140
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
-
1195
1141
struct MapKeyDeserializer < ' de > {
1196
1142
key : Cow < ' de , str > ,
1197
1143
}
0 commit comments