use crate::error::Result;
pub trait BlockDevice: Send {
fn read_blocks(&self, block_id: u64, buf: &mut [u8]) -> Result<u32>;
fn write_blocks(&mut self, block_id: u64, buf: &[u8]) -> Result<u32>;
fn flush(&mut self) -> Result<()>;
fn block_size(&self) -> u32;
fn block_count(&self) -> u64;
fn open(&mut self) -> Result<()> {
Ok(())
}
fn close(&mut self) -> Result<()> {
Ok(())
}
}
pub trait BlockDeviceExt: BlockDevice {
fn total_size(&self) -> u64 {
self.block_count() * self.block_size() as u64
}
}
impl<T: BlockDevice> BlockDeviceExt for T {}