From 561b0dbe4d9391f0a1617a896ea9d372acd2a072 Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Mon, 4 Dec 2017 23:43:50 -0800 Subject: [PATCH] Make deserialize_bytes work more like deserialize_str --- src/de.rs | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/de.rs b/src/de.rs index 4373706..71ee1ef 100644 --- a/src/de.rs +++ b/src/de.rs @@ -1113,8 +1113,15 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer { where V: de::Visitor<'de>, { - match try!(self.parse_whitespace()) { - Some(b'"') => { + let peek = match try!(self.parse_whitespace()) { + Some(b) => b, + None => { + return Err(self.peek_error(ErrorCode::EofWhileParsingValue)); + } + }; + + let value = match peek { + b'"' => { self.eat_char(); self.str_buf.clear(); match try!(self.read.parse_str_raw(&mut self.str_buf)) { @@ -1122,9 +1129,14 @@ impl<'de, 'a, R: Read<'de>> de::Deserializer<'de> for &'a mut Deserializer { Reference::Copied(b) => visitor.visit_bytes(b), } } - _ => self.deserialize_any(visitor), - } + b'[' => self.deserialize_seq(visitor), + _ => Err(self.peek_invalid_type(&visitor)), + }; + match value { + Ok(value) => Ok(value), + Err(err) => Err(self.fix_position(err)), + } } #[inline]