From 66b43487b6949e388b6aa08b177b800c75d9084c Mon Sep 17 00:00:00 2001 From: SanmerDev Date: Thu, 8 Feb 2024 21:03:36 +0800 Subject: [PATCH] Optimize `Read` --- src/de.rs | 10 +++++----- src/read.rs | 22 ++++++++++------------ 2 files changed, 15 insertions(+), 17 deletions(-) diff --git a/src/de.rs b/src/de.rs index 42472c7..ed2a82f 100644 --- a/src/de.rs +++ b/src/de.rs @@ -35,16 +35,16 @@ impl<'a> Deserializer> { } impl<'de, R: Read<'de>> Deserializer { - fn next_char(&mut self) -> Result> { + fn next_char(&mut self) -> Option { self.read.next() } - fn peek(&mut self) -> Result> { + fn peek(&mut self) -> Option { self.read.peek() } fn end(&mut self) -> Result<()> { - match self.peek()? { + match self.peek() { Some(_) => Err(de::Error::custom("not over yet")), None => Ok(()), } @@ -344,7 +344,7 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> { { self.de.inner.clear(); loop { - match self.de.next_char()? { + match self.de.next_char() { None => { return Ok(None); } @@ -363,7 +363,7 @@ impl<'de, 'a, R: Read<'de> + 'a> de::MapAccess<'de> for MapAccess<'a, R> { { self.de.inner.clear(); loop { - match self.de.next_char()? { + match self.de.next_char() { Some(b'\n') | Some(b'\t') | Some(b'\r') | None => { return seed.deserialize(&mut *self.de); } diff --git a/src/read.rs b/src/read.rs index 1692535..79d6050 100644 --- a/src/read.rs +++ b/src/read.rs @@ -1,10 +1,8 @@ use core::str; -use crate::error::Result; - pub trait Read<'de> { - fn next(&mut self) -> Result>; - fn peek(&mut self) -> Result>; + fn next(&mut self) -> Option; + fn peek(&mut self) -> Option; fn discard(&mut self); fn byte_offset(&self) -> usize; } @@ -26,23 +24,23 @@ impl<'a> SliceRead<'a> { impl<'a> Read<'a> for SliceRead<'a> { #[inline] - fn next(&mut self) -> Result> { - Ok(if self.index < self.slice.len() { + fn next(&mut self) -> Option { + if self.index < self.slice.len() { let ch = self.slice[self.index]; self.index += 1; Some(ch) } else { None - }) + } } #[inline] - fn peek(&mut self) -> Result> { - Ok(if self.index < self.slice.len() { + fn peek(&mut self) -> Option { + if self.index < self.slice.len() { Some(self.slice[self.index]) } else { None - }) + } } #[inline] @@ -65,12 +63,12 @@ impl<'a> StrRead<'a> { impl<'a> Read<'a> for StrRead<'a> { #[inline] - fn next(&mut self) -> Result> { + fn next(&mut self) -> Option { self.delegate.next() } #[inline] - fn peek(&mut self) -> Result> { + fn peek(&mut self) -> Option { self.delegate.peek() }