@@ -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-
594577impl < ' de > SeqAccess < ' de > for SeqDeserializer {
595578 type Error = Error ;
596579
0 commit comments