Skip to main content

chapter_tgz/
refmut.rs

1use std::io::{Read, Result, Seek, SeekFrom};
2
3pub(crate) enum RefMut<'a, R> {
4    Borrowed(&'a mut R),
5    Owned(Box<R>),
6}
7
8impl<'a, R> Read for RefMut<'a, R>
9where
10    R: Read,
11{
12    fn read(&mut self, buf: &mut [u8]) -> Result<usize> {
13        match self {
14            RefMut::Borrowed(r) => r.read(buf),
15            RefMut::Owned(r) => r.read(buf),
16        }
17    }
18}
19
20impl<'a, R> Seek for RefMut<'a, R>
21where
22    R: Seek,
23{
24    fn seek(&mut self, pos: SeekFrom) -> Result<u64> {
25        match self {
26            RefMut::Borrowed(r) => r.seek(pos),
27            RefMut::Owned(r) => r.seek(pos),
28        }
29    }
30}