positioned_io2/
refs.rs

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}