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
use crate::Result; pub trait Read { fn read(&self, buffer: &mut [u8]) -> Result<usize>; } pub trait ReadAt { fn read_at(&self, offset: u64, buffer: &mut [u8]) -> Result<usize>; } pub trait Flush { fn flush(&self) -> Result<()>; } pub trait Size { fn size(&self) -> Result<u64>; } pub trait Write: Flush { fn write(&self, data: &[u8]) -> Result<usize>; } pub trait WriteAt: Flush { fn write_at(&self, offset: u64, data: &[u8]) -> Result<usize>; } pub enum SeekFrom { Start(u64), End(i64), Current(i64), } impl From<u64> for SeekFrom { fn from(value: u64) -> Self { SeekFrom::Start(value) } } pub trait Seek { fn seek(&self, to: SeekFrom) -> Result<u64>; fn stream_position(&self) -> Result<u64>; fn stream_len(&self) -> Result<u64>; }