summaryrefslogtreecommitdiffstats
path: root/buffered-reader
diff options
context:
space:
mode:
authorJustus Winter <justus@sequoia-pgp.org>2020-01-29 15:22:54 +0100
committerJustus Winter <justus@sequoia-pgp.org>2020-01-29 15:22:54 +0100
commit30caede6f8f5c777370014b67e4de5e50b24b777 (patch)
treea34aa2e3bb7522b39fa3e30c4d0c99d470d324f2 /buffered-reader
parent300bd3e016d264cdf1cec06c9d09e411c550ded9 (diff)
buffered-reader: New method BufferedReader::as_boxed.
- This method returns the reader in a box. The nice thing is that we can provide a specialized implementation for Box<BufferedReader> that avoids boxing the reader twice. This cleanly addresses the issue worked around in 9619dffaa756d8cfd6ec691699bd6ae4d59ecfb5.
Diffstat (limited to 'buffered-reader')
-rw-r--r--buffered-reader/src/lib.rs13
1 files changed, 13 insertions, 0 deletions
diff --git a/buffered-reader/src/lib.rs b/buffered-reader/src/lib.rs
index f226198e..4661b959 100644
--- a/buffered-reader/src/lib.rs
+++ b/buffered-reader/src/lib.rs
@@ -818,6 +818,13 @@ pub trait BufferedReader<C> : io::Read + fmt::Debug + fmt::Display {
Ok(at_least_one_byte)
}
+ /// Boxes the reader.
+ fn as_boxed<'a>(self) -> Box<dyn BufferedReader<C> + 'a>
+ where Self: 'a + Sized
+ {
+ Box::new(self)
+ }
+
/// Returns the underlying reader, if any.
///
/// To allow this to work with `BufferedReader` traits, it is
@@ -963,6 +970,12 @@ impl <'a, C> BufferedReader<C> for Box<dyn BufferedReader<C> + 'a> {
self.as_ref().get_ref()
}
+ fn as_boxed<'b>(self) -> Box<dyn BufferedReader<C> + 'b>
+ where Self: 'b
+ {
+ self
+ }
+
fn into_inner<'b>(self: Box<Self>) -> Option<Box<dyn BufferedReader<C> + 'b>>
where Self: 'b {
// Strip the outer box.