1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
#![cfg(any(test, feature = "std"))] use std::fs::File; use std::io::{Error, Read, Seek, SeekFrom, Write}; use std::sync::Mutex; use std::time::{SystemTime, UNIX_EPOCH}; use super::*; impl Device for Mutex<File> { fn read_at(&self, offset: usize, buf: &mut [u8]) -> Result<usize> { let offset = offset as u64; let mut file = self.lock().unwrap(); file.seek(SeekFrom::Start(offset))?; let len = file.read(buf)?; Ok(len) } fn write_at(&self, offset: usize, buf: &[u8]) -> Result<usize> { let offset = offset as u64; let mut file = self.lock().unwrap(); file.seek(SeekFrom::Start(offset))?; let len = file.write(buf)?; Ok(len) } fn sync(&self) -> Result<()> { let file = self.lock().unwrap(); file.sync_all()?; Ok(()) } } pub struct StdTimeProvider; impl TimeProvider for StdTimeProvider { fn current_time(&self) -> Timespec { let duration = SystemTime::now().duration_since(UNIX_EPOCH).unwrap(); Timespec { sec: duration.as_secs() as i64, nsec: duration.subsec_nanos() as i32, } } } impl From<Error> for DevError { fn from(_: Error) -> Self { DevError } }