@@ -1926,31 +1926,41 @@ impl<'de, 'a, R: Read<'de> + 'a> de::SeqAccess<'de> for SeqAccess<'a, R> {
19261926    where 
19271927        T :  de:: DeserializeSeed < ' de > , 
19281928    { 
1929-         let  peek = match  tri ! ( self . de. parse_whitespace( ) )  { 
1930-             Some ( b']' )  => { 
1931-                 return  Ok ( None ) ; 
1932-             } 
1933-             Some ( b',' )  if  !self . first  => { 
1934-                 self . de . eat_char ( ) ; 
1935-                 tri ! ( self . de. parse_whitespace( ) ) 
1936-             } 
1937-             Some ( b)  => { 
1938-                 if  self . first  { 
1939-                     self . first  = false ; 
1940-                     Some ( b) 
1941-                 }  else  { 
1942-                     return  Err ( self . de . peek_error ( ErrorCode :: ExpectedListCommaOrEnd ) ) ; 
1929+         fn  has_next_element < ' de ,  ' a ,  R :  Read < ' de >  + ' a > ( 
1930+             seq :  & mut  SeqAccess < ' a ,  R > , 
1931+         )  -> Result < bool >  { 
1932+             let  peek = match  tri ! ( seq. de. parse_whitespace( ) )  { 
1933+                 Some ( b']' )  => { 
1934+                     return  Ok ( false ) ; 
19431935                } 
1936+                 Some ( b',' )  if  !seq. first  => { 
1937+                     seq. de . eat_char ( ) ; 
1938+                     tri ! ( seq. de. parse_whitespace( ) ) 
1939+                 } 
1940+                 Some ( b)  => { 
1941+                     if  seq. first  { 
1942+                         seq. first  = false ; 
1943+                         Some ( b) 
1944+                     }  else  { 
1945+                         return  Err ( seq. de . peek_error ( ErrorCode :: ExpectedListCommaOrEnd ) ) ; 
1946+                     } 
1947+                 } 
1948+                 None  => { 
1949+                     return  Err ( seq. de . peek_error ( ErrorCode :: EofWhileParsingList ) ) ; 
1950+                 } 
1951+             } ; 
1952+ 
1953+             match  peek { 
1954+                 Some ( b']' )  => Err ( seq. de . peek_error ( ErrorCode :: TrailingComma ) ) , 
1955+                 Some ( _)  => Ok ( true ) , 
1956+                 None  => Err ( seq. de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) , 
19441957            } 
1945-             None  => { 
1946-                 return  Err ( self . de . peek_error ( ErrorCode :: EofWhileParsingList ) ) ; 
1947-             } 
1948-         } ; 
1958+         } 
19491959
1950-         match  peek  { 
1951-             Some ( b']' )  =>  Err ( self . de . peek_error ( ErrorCode :: TrailingComma ) ) , 
1952-              Some ( _ )  =>  Ok ( Some ( tri ! ( seed . deserialize ( & mut   * self . de ) ) ) ) , 
1953-             None  =>  Err ( self . de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) , 
1960+         if   tri ! ( has_next_element ( self ) )  { 
1961+             Ok ( Some ( tri ! ( seed . deserialize ( & mut   * self . de) ) ) ) 
1962+         }   else   { 
1963+             Ok ( None ) 
19541964        } 
19551965    } 
19561966} 
@@ -1973,32 +1983,40 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> {
19731983    where 
19741984        K :  de:: DeserializeSeed < ' de > , 
19751985    { 
1976-         let  peek = match  tri ! ( self . de. parse_whitespace( ) )  { 
1977-             Some ( b'}' )  => { 
1978-                 return  Ok ( None ) ; 
1979-             } 
1980-             Some ( b',' )  if  !self . first  => { 
1981-                 self . de . eat_char ( ) ; 
1982-                 tri ! ( self . de. parse_whitespace( ) ) 
1983-             } 
1984-             Some ( b)  => { 
1985-                 if  self . first  { 
1986-                     self . first  = false ; 
1987-                     Some ( b) 
1988-                 }  else  { 
1989-                     return  Err ( self . de . peek_error ( ErrorCode :: ExpectedObjectCommaOrEnd ) ) ; 
1986+         fn  has_next_key < ' de ,  ' a ,  R :  Read < ' de >  + ' a > ( map :  & mut  MapAccess < ' a ,  R > )  -> Result < bool >  { 
1987+             let  peek = match  tri ! ( map. de. parse_whitespace( ) )  { 
1988+                 Some ( b'}' )  => { 
1989+                     return  Ok ( false ) ; 
19901990                } 
1991+                 Some ( b',' )  if  !map. first  => { 
1992+                     map. de . eat_char ( ) ; 
1993+                     tri ! ( map. de. parse_whitespace( ) ) 
1994+                 } 
1995+                 Some ( b)  => { 
1996+                     if  map. first  { 
1997+                         map. first  = false ; 
1998+                         Some ( b) 
1999+                     }  else  { 
2000+                         return  Err ( map. de . peek_error ( ErrorCode :: ExpectedObjectCommaOrEnd ) ) ; 
2001+                     } 
2002+                 } 
2003+                 None  => { 
2004+                     return  Err ( map. de . peek_error ( ErrorCode :: EofWhileParsingObject ) ) ; 
2005+                 } 
2006+             } ; 
2007+ 
2008+             match  peek { 
2009+                 Some ( b'"' )  => Ok ( true ) , 
2010+                 Some ( b'}' )  => Err ( map. de . peek_error ( ErrorCode :: TrailingComma ) ) , 
2011+                 Some ( _)  => Err ( map. de . peek_error ( ErrorCode :: KeyMustBeAString ) ) , 
2012+                 None  => Err ( map. de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) , 
19912013            } 
1992-             None  => { 
1993-                 return  Err ( self . de . peek_error ( ErrorCode :: EofWhileParsingObject ) ) ; 
1994-             } 
1995-         } ; 
2014+         } 
19962015
1997-         match  peek { 
1998-             Some ( b'"' )  => seed. deserialize ( MapKey  {  de :  & mut  * self . de  } ) . map ( Some ) , 
1999-             Some ( b'}' )  => Err ( self . de . peek_error ( ErrorCode :: TrailingComma ) ) , 
2000-             Some ( _)  => Err ( self . de . peek_error ( ErrorCode :: KeyMustBeAString ) ) , 
2001-             None  => Err ( self . de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) , 
2016+         if  tri ! ( has_next_key( self ) )  { 
2017+             Ok ( Some ( tri ! ( seed. deserialize( MapKey  {  de:  & mut  * self . de } ) ) ) ) 
2018+         }  else  { 
2019+             Ok ( None ) 
20022020        } 
20032021    } 
20042022
0 commit comments