diff options
author | Justus Winter <justus@sequoia-pgp.org> | 2020-01-29 15:22:54 +0100 |
---|---|---|
committer | Justus Winter <justus@sequoia-pgp.org> | 2020-01-29 15:22:54 +0100 |
commit | 30caede6f8f5c777370014b67e4de5e50b24b777 (patch) | |
tree | a34aa2e3bb7522b39fa3e30c4d0c99d470d324f2 /buffered-reader/src | |
parent | 300bd3e016d264cdf1cec06c9d09e411c550ded9 (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/src')
-rw-r--r-- | buffered-reader/src/lib.rs | 13 |
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. |