From 2a4cb44f7cc591a4542cbb1a73ca5bdc8a02c0d7 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 19 Oct 2024 09:21:55 -0700 Subject: [PATCH] Rearrange 'match peek' --- src/de.rs | 60 ++++++++++++++++++++++++------------------------------- 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/src/de.rs b/src/de.rs index d6cb502da..88ca3e66c 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1929,31 +1929,25 @@ impl<'de, 'a, R: Read<'de> + 'a> de::SeqAccess<'de> for SeqAccess<'a, R> { fn has_next_element<'de, 'a, R: Read<'de> + 'a>( seq: &mut SeqAccess<'a, R>, ) -> Result { - let peek = match tri!(seq.de.parse_whitespace()) { - Some(b']') => { - return Ok(false); - } + match tri!(seq.de.parse_whitespace()) { + Some(b']') => Ok(false), Some(b',') if !seq.first => { seq.de.eat_char(); - tri!(seq.de.parse_whitespace()) + match tri!(seq.de.parse_whitespace()) { + Some(b']') => Err(seq.de.peek_error(ErrorCode::TrailingComma)), + Some(_) => Ok(true), + None => Err(seq.de.peek_error(ErrorCode::EofWhileParsingValue)), + } } - Some(b) => { + Some(_) => { if seq.first { seq.first = false; - Some(b) + Ok(true) } else { - return Err(seq.de.peek_error(ErrorCode::ExpectedListCommaOrEnd)); + Err(seq.de.peek_error(ErrorCode::ExpectedListCommaOrEnd)) } } - None => { - return Err(seq.de.peek_error(ErrorCode::EofWhileParsingList)); - } - }; - - match peek { - Some(b']') => Err(seq.de.peek_error(ErrorCode::TrailingComma)), - Some(_) => Ok(true), - None => Err(seq.de.peek_error(ErrorCode::EofWhileParsingValue)), + None => Err(seq.de.peek_error(ErrorCode::EofWhileParsingList)), } } @@ -1984,32 +1978,30 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> { K: de::DeserializeSeed<'de>, { fn has_next_key<'de, 'a, R: Read<'de> + 'a>(map: &mut MapAccess<'a, R>) -> Result { - let peek = match tri!(map.de.parse_whitespace()) { - Some(b'}') => { - return Ok(false); - } + match tri!(map.de.parse_whitespace()) { + Some(b'}') => Ok(false), Some(b',') if !map.first => { map.de.eat_char(); - tri!(map.de.parse_whitespace()) + match tri!(map.de.parse_whitespace()) { + Some(b'"') => Ok(true), + Some(b'}') => Err(map.de.peek_error(ErrorCode::TrailingComma)), + Some(_) => Err(map.de.peek_error(ErrorCode::KeyMustBeAString)), + None => Err(map.de.peek_error(ErrorCode::EofWhileParsingValue)), + } } Some(b) => { if map.first { map.first = false; - Some(b) + if b == b'"' { + Ok(true) + } else { + Err(map.de.peek_error(ErrorCode::KeyMustBeAString)) + } } else { - return Err(map.de.peek_error(ErrorCode::ExpectedObjectCommaOrEnd)); + Err(map.de.peek_error(ErrorCode::ExpectedObjectCommaOrEnd)) } } - None => { - return Err(map.de.peek_error(ErrorCode::EofWhileParsingObject)); - } - }; - - match peek { - Some(b'"') => Ok(true), - Some(b'}') => Err(map.de.peek_error(ErrorCode::TrailingComma)), - Some(_) => Err(map.de.peek_error(ErrorCode::KeyMustBeAString)), - None => Err(map.de.peek_error(ErrorCode::EofWhileParsingValue)), + None => Err(map.de.peek_error(ErrorCode::EofWhileParsingObject)), } }