From 6c3b677dd735b165c33fbab07eb6380cb7674318 Mon Sep 17 00:00:00 2001 From: slyrz Date: Thu, 9 Mar 2017 20:02:27 +0100 Subject: [PATCH] Revamp deserialize_char (#133) * Remove unneccesary unwrap * Use a single buffer for reading a char * Replace while loop with read_exact * Remove first_byte variable * Use read_exact to avoid waiting for data after EOF * Create error in a closure --- src/serde/reader.rs | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/src/serde/reader.rs b/src/serde/reader.rs index 8d6e2db..8c29e28 100644 --- a/src/serde/reader.rs +++ b/src/serde/reader.rs @@ -151,36 +151,26 @@ impl<'a, R: Read, E: ByteOrder> serde::Deserializer for &'a mut Deserializer break, - n if n < width - start => { start += n; } - _ => return Err(error) - } - } + if self.reader.read_exact(&mut buf[1..width]).is_err() { + return Err(error()); } - let res = try!(match str::from_utf8(&buf[..width]).ok() { - Some(s) => Ok(s.chars().next().unwrap()), - None => Err(error) - }); - + let res = try!(str::from_utf8(&buf[..width]).ok().and_then(|s| s.chars().next()).ok_or(error())); visitor.visit_char(res) } @@ -229,7 +219,7 @@ impl<'a, R: Read, E: ByteOrder> serde::Deserializer for &'a mut Deserializer(self, _len: usize, visitor: V) -> Result