From 18fa4d0be6285f68b9a163c52bd65955fb3a795b Mon Sep 17 00:00:00 2001 From: Justus Winter Date: Wed, 29 Jan 2020 17:42:02 +0100 Subject: buffered-reader: Make Dup polymorphic. - Also, make PacketHeaderParser polymorphic over BufferedReader at the same time. --- buffered-reader/src/dup.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'buffered-reader') diff --git a/buffered-reader/src/dup.rs b/buffered-reader/src/dup.rs index e5a5d895..e95971e5 100644 --- a/buffered-reader/src/dup.rs +++ b/buffered-reader/src/dup.rs @@ -10,8 +10,8 @@ use super::*; /// Note: this will likely cause the underlying stream to buffer as /// much data as you read. Thus, it should only be used for peeking /// at the underlying `BufferedReader`. -pub struct Dup<'a, C> { - reader: Box + 'a>, +pub struct Dup, C> { + reader: T, // The number of bytes that have been consumed. cursor: usize, @@ -20,14 +20,14 @@ pub struct Dup<'a, C> { cookie: C, } -impl<'a, C> fmt::Display for Dup<'a, C> { +impl, C> fmt::Display for Dup { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write!(f, "Dup ({} bytes consumed)", self.cursor) } } -impl<'a, C> fmt::Debug for Dup<'a, C> { +impl, C> fmt::Debug for Dup { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { f.debug_struct("Dup") .field("cursor", &self.cursor) @@ -36,21 +36,21 @@ impl<'a, C> fmt::Debug for Dup<'a, C> { } } -impl<'a> Dup<'a, ()> { +impl> Dup { /// Instantiates a new `Dup` buffered reader. /// /// `reader` is the `BufferedReader` to duplicate. - pub fn new(reader: Box + 'a>) -> Self { + pub fn new(reader: T) -> Self { Self::with_cookie(reader, ()) } } -impl<'a, C> Dup<'a, C> { +impl, C> Dup { /// Like `new()`, but uses a cookie. /// /// The cookie can be retrieved using the `cookie_ref` and /// `cookie_mut` methods, and set using the `cookie_set` method. - pub fn with_cookie(reader: Box + 'a>, cookie: C) -> Self { + pub fn with_cookie(reader: T, cookie: C) -> Self { Dup { reader: reader, cursor: 0, @@ -69,7 +69,7 @@ impl<'a, C> Dup<'a, C> { } } -impl<'a, C> io::Read for Dup<'a, C> { +impl, C> io::Read for Dup { fn read(&mut self, buf: &mut [u8]) -> Result { let data = self.reader.data(self.cursor + buf.len())?; assert!(data.len() >= self.cursor); @@ -84,7 +84,7 @@ impl<'a, C> io::Read for Dup<'a, C> { } } -impl<'a, C> BufferedReader for Dup<'a, C> { +impl, C> BufferedReader for Dup { fn buffer(&self) -> &[u8] { let data = self.reader.buffer(); assert!(data.len() >= self.cursor); @@ -131,7 +131,7 @@ impl<'a, C> BufferedReader for Dup<'a, C> { fn into_inner<'b>(self: Box) -> Option + 'b>> where Self: 'b { - Some(self.reader) + Some(Box::new(self.reader)) } fn cookie_set(&mut self, cookie: C) -> C { @@ -157,7 +157,7 @@ mod test { fn buffered_reader_memory_test () { let data : &[u8] = include_bytes!("buffered-reader-test.txt"); let reader = Memory::new(data); - let mut reader = Dup::new(Box::new(reader)); + let mut reader = Dup::new(reader); buffered_reader_test_data_check(&mut reader); @@ -193,7 +193,7 @@ mod test { } let reader = Memory::new(&input[..]); - let mut reader = Dup::new(Box::new(reader)); + let mut reader = Dup::new(reader); for i in 0..input.len() { let data = reader.data(DEFAULT_BUF_SIZE + 1).unwrap().to_vec(); -- cgit v1.2.3