@@ -504,13 +504,8 @@ struct MapDeserializer<'a> {
504504 processed : usize ,
505505}
506506
507- impl < ' de > de:: MapAccess < ' de > for MapDeserializer < ' _ > {
508- type Error = Error ;
509-
510- fn next_key_seed < T > ( & mut self , seed : T ) -> Result < Option < T :: Value > >
511- where
512- T : de:: DeserializeSeed < ' de > ,
513- {
507+ impl < ' a > MapDeserializer < ' a > {
508+ fn next_key_deserializer ( & mut self ) -> Result < Option < Deserializer > > {
514509 loop {
515510 match self . pairs . next ( ) {
516511 Some ( item) => {
@@ -526,25 +521,47 @@ impl<'de> de::MapAccess<'de> for MapDeserializer<'_> {
526521 self . value = Some ( value) ;
527522 let visited = Rc :: clone ( & self . visited ) ;
528523 let key_de = Deserializer :: from_parts ( key, self . options , visited) ;
529- return seed . deserialize ( key_de) . map ( Some ) ;
524+ return Ok ( Some ( key_de) ) ;
530525 }
531526 None => return Ok ( None ) ,
532527 }
533528 }
534529 }
535530
536- fn next_value_seed < T > ( & mut self , seed : T ) -> Result < T :: Value >
537- where
538- T : de:: DeserializeSeed < ' de > ,
539- {
531+ fn next_value_deserializer ( & mut self ) -> Result < Deserializer > {
540532 match self . value . take ( ) {
541533 Some ( value) => {
542534 let visited = Rc :: clone ( & self . visited ) ;
543- seed . deserialize ( Deserializer :: from_parts ( value, self . options , visited) )
535+ Ok ( Deserializer :: from_parts ( value, self . options , visited) )
544536 }
545537 None => Err ( de:: Error :: custom ( "value is missing" ) ) ,
546538 }
547539 }
540+ }
541+
542+ impl < ' de > de:: MapAccess < ' de > for MapDeserializer < ' _ > {
543+ type Error = Error ;
544+
545+ fn next_key_seed < T > ( & mut self , seed : T ) -> Result < Option < T :: Value > >
546+ where
547+ T : de:: DeserializeSeed < ' de > ,
548+ {
549+ match self . next_key_deserializer ( ) {
550+ Ok ( Some ( key_de) ) => seed. deserialize ( key_de) . map ( Some ) ,
551+ Ok ( None ) => Ok ( None ) ,
552+ Err ( error) => Err ( error) ,
553+ }
554+ }
555+
556+ fn next_value_seed < T > ( & mut self , seed : T ) -> Result < T :: Value >
557+ where
558+ T : de:: DeserializeSeed < ' de > ,
559+ {
560+ match self . next_value_deserializer ( ) {
561+ Ok ( value_de) => seed. deserialize ( value_de) ,
562+ Err ( error) => Err ( error) ,
563+ }
564+ }
548565
549566 fn size_hint ( & self ) -> Option < usize > {
550567 match self . pairs . size_hint ( ) {
0 commit comments