1use super::super::*;
2use std::ops::{Deref, DerefMut};
3use super::{AsRaw,pread,pwrite};
4
5#[derive(Debug, Eq, PartialEq)]
6pub struct IoAtRaw<S: AsRaw>(S);
7impl<S: AsRaw> From<S> for IoAtRaw<S> {
8 fn from(v: S) -> Self {
9 IoAtRaw(v)
10 }
11}
12
13impl<S: AsRaw> ReadAt for IoAtRaw<S> {
14 fn read_at(&self, buf: &mut[u8], offs: u64) -> Result<usize> {
15 pread(&self.0, buf, offs)
16 }
17}
18
19impl<S: AsRaw> WriteAt for IoAtRaw<S> {
20 fn write_at(&mut self, buf: &[u8], offs: u64) -> Result<usize> {
21 pwrite(&self.0, buf, offs)
22 }
23}
24
25impl<T: AsRaw> Deref for IoAtRaw<T> {
26 type Target = T;
27 fn deref<'a>(&'a self) -> &'a T {
28 &self.0
29 }
30}
31
32impl<T: AsRaw> DerefMut for IoAtRaw<T> {
33 fn deref_mut<'a>(&'a mut self) -> &'a mut T {
34 &mut self.0
35 }
36}
37
38#[test]
39fn do_t() {
40 use tempfile;
41 let f = tempfile::tempfile().unwrap();
42 let at = IoAtRaw::from(f);
43 super::super::test_impl(at);
44}
45
46