@@ -1929,25 +1929,31 @@ impl<'de, 'a, R: Read<'de> + 'a> de::SeqAccess<'de> for SeqAccess<'a, R> {
1929
1929
fn has_next_element < ' de , ' a , R : Read < ' de > + ' a > (
1930
1930
seq : & mut SeqAccess < ' a , R > ,
1931
1931
) -> Result < bool > {
1932
- match tri ! ( seq. de. parse_whitespace( ) ) {
1933
- Some ( b']' ) => Ok ( false ) ,
1934
- Some ( b',' ) if !seq. first => {
1932
+ let peek = match tri ! ( seq. de. parse_whitespace( ) ) {
1933
+ Some ( b) => b,
1934
+ None => {
1935
+ return Err ( seq. de . peek_error ( ErrorCode :: EofWhileParsingList ) ) ;
1936
+ }
1937
+ } ;
1938
+
1939
+ match peek {
1940
+ b']' => Ok ( false ) ,
1941
+ b',' if !seq. first => {
1935
1942
seq. de . eat_char ( ) ;
1936
1943
match tri ! ( seq. de. parse_whitespace( ) ) {
1937
1944
Some ( b']' ) => Err ( seq. de . peek_error ( ErrorCode :: TrailingComma ) ) ,
1938
1945
Some ( _) => Ok ( true ) ,
1939
1946
None => Err ( seq. de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) ,
1940
1947
}
1941
1948
}
1942
- Some ( _ ) => {
1949
+ _ => {
1943
1950
if seq. first {
1944
1951
seq. first = false ;
1945
1952
Ok ( true )
1946
1953
} else {
1947
1954
Err ( seq. de . peek_error ( ErrorCode :: ExpectedListCommaOrEnd ) )
1948
1955
}
1949
1956
}
1950
- None => Err ( seq. de . peek_error ( ErrorCode :: EofWhileParsingList ) ) ,
1951
1957
}
1952
1958
}
1953
1959
@@ -1978,9 +1984,16 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> {
1978
1984
K : de:: DeserializeSeed < ' de > ,
1979
1985
{
1980
1986
fn has_next_key < ' de , ' a , R : Read < ' de > + ' a > ( map : & mut MapAccess < ' a , R > ) -> Result < bool > {
1981
- match tri ! ( map. de. parse_whitespace( ) ) {
1982
- Some ( b'}' ) => Ok ( false ) ,
1983
- Some ( b',' ) if !map. first => {
1987
+ let peek = match tri ! ( map. de. parse_whitespace( ) ) {
1988
+ Some ( b) => b,
1989
+ None => {
1990
+ return Err ( map. de . peek_error ( ErrorCode :: EofWhileParsingObject ) ) ;
1991
+ }
1992
+ } ;
1993
+
1994
+ match peek {
1995
+ b'}' => Ok ( false ) ,
1996
+ b',' if !map. first => {
1984
1997
map. de . eat_char ( ) ;
1985
1998
match tri ! ( map. de. parse_whitespace( ) ) {
1986
1999
Some ( b'"' ) => Ok ( true ) ,
@@ -1989,10 +2002,10 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> {
1989
2002
None => Err ( map. de . peek_error ( ErrorCode :: EofWhileParsingValue ) ) ,
1990
2003
}
1991
2004
}
1992
- Some ( b ) => {
2005
+ _ => {
1993
2006
if map. first {
1994
2007
map. first = false ;
1995
- if b == b'"' {
2008
+ if peek == b'"' {
1996
2009
Ok ( true )
1997
2010
} else {
1998
2011
Err ( map. de . peek_error ( ErrorCode :: KeyMustBeAString ) )
@@ -2001,7 +2014,6 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> {
2001
2014
Err ( map. de . peek_error ( ErrorCode :: ExpectedObjectCommaOrEnd ) )
2002
2015
}
2003
2016
}
2004
- None => Err ( map. de . peek_error ( ErrorCode :: EofWhileParsingObject ) ) ,
2005
2017
}
2006
2018
}
2007
2019
0 commit comments