From 4003c504c502df61fa60ebc44118c948861132ba Mon Sep 17 00:00:00 2001 From: MATILLAT Quentin Date: Sat, 30 May 2020 13:46:53 +0100 Subject: [PATCH] Add Read implementation for &mut Read --- src/read.rs | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) diff --git a/src/read.rs b/src/read.rs index a806abdc5..c4eb44179 100644 --- a/src/read.rs +++ b/src/read.rs @@ -111,6 +111,84 @@ pub trait Read<'de>: private::Sealed { fn set_failed(&mut self, failed: &mut bool); } +impl<'de, R: Read<'de>> private::Sealed for &mut R {} +impl<'de, R: Read<'de>> Read<'de> for &mut R { + #[inline] + fn next(&mut self) -> Result> { + R::next(self) + } + + #[inline] + fn peek(&mut self) -> Result> { + R::peek(self) + } + + #[inline] + fn discard(&mut self) { + R::discard(self) + } + + #[inline] + fn position(&self) -> Position { + R::position(self) + } + + #[inline] + fn peek_position(&self) -> Position { + R::peek_position(self) + } + + #[inline] + fn byte_offset(&self) -> usize { + R::byte_offset(self) + } + + #[inline] + fn parse_str<'s>(&'s mut self, scratch: &'s mut Vec) -> Result> { + R::parse_str(self, scratch) + } + + #[inline] + fn parse_str_raw<'s>( + &'s mut self, + scratch: &'s mut Vec, + ) -> Result> { + R::parse_str_raw(self, scratch) + } + + #[inline] + fn ignore_str(&mut self) -> Result<()> { + R::ignore_str(self) + } + + #[inline] + fn decode_hex_escape(&mut self) -> Result { + R::decode_hex_escape(self) + } + + #[cfg(feature = "raw_value")] + #[inline] + fn begin_raw_buffering(&mut self) { + R::begin_raw_buffering(self) + } + + #[cfg(feature = "raw_value")] + #[inline] + fn end_raw_buffering(&mut self, visitor: V) -> Result + where + V: Visitor<'de>, + { + R::end_raw_buffering(self, visitor) + } + + const should_early_return_if_failed: bool = R::should_early_return_if_failed; + + #[inline] + fn set_failed(&mut self, failed: &mut bool) { + R::set_failed(self, failed) + } +} + pub struct Position { pub line: usize, pub column: usize,