1use std::cell::RefCell;
2use std::io;
3
4use super::{ReadAt, Size, WriteAt};
5
6impl<'a, R: ReadAt + ?Sized> ReadAt for &'a R {
7 fn read_at(&self, pos: u64, buf: &mut [u8]) -> io::Result<usize> {
8 R::read_at(self, pos, buf)
9 }
10}
11
12impl<'a, R: ReadAt + ?Sized> ReadAt for &'a mut R {
13 fn read_at(&self, pos: u64, buf: &mut [u8]) -> io::Result<usize> {
14 R::read_at(self, pos, buf)
15 }
16}
17
18impl<'a, W: WriteAt + ?Sized> WriteAt for &'a mut W {
19 fn write_at(&mut self, pos: u64, buf: &[u8]) -> io::Result<usize> {
20 W::write_at(self, pos, buf)
21 }
22
23 fn flush(&mut self) -> io::Result<()> {
24 W::flush(self)
25 }
26}
27
28impl<'a, S: Size + ?Sized> Size for &'a S {
29 fn size(&self) -> io::Result<Option<u64>> {
30 S::size(self)
31 }
32}
33impl<'a, S: Size + ?Sized> Size for &'a mut S {
34 fn size(&self) -> io::Result<Option<u64>> {
35 S::size(self)
36 }
37}
38
39impl<'a, R: ReadAt> ReadAt for &'a RefCell<R> {
40 fn read_at(&self, pos: u64, buf: &mut [u8]) -> io::Result<usize> {
41 self.borrow().read_at(pos, buf)
42 }
43}
44
45impl<'a, W: WriteAt> WriteAt for &'a RefCell<W> {
46 fn write_at(&mut self, pos: u64, buf: &[u8]) -> io::Result<usize> {
47 self.borrow_mut().write_at(pos, buf)
48 }
49
50 fn flush(&mut self) -> io::Result<()> {
51 self.borrow_mut().flush()
52 }
53}
54
55impl<'a, S: Size> Size for &'a RefCell<S> {
56 fn size(&self) -> io::Result<Option<u64>> {
57 self.borrow().size()
58 }
59}