io_at/os/
raw.rs

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// FIXME: we need support for $t:ty < ... >
47//impl_ref_io_at!{IoAtRaw}