pub trait BlockDevice: SharedDeviceOps {
// Required methods
fn block_size(&self) -> usize;
fn num_blocks(&self) -> usize;
fn read_blocks(
&self,
block_idx: usize,
num_blocks: usize,
buf: &mut [u8],
) -> Result<usize, DeviceError>;
fn write_blocks(
&self,
block_idx: usize,
num_blocks: usize,
buf: &[u8],
) -> Result<usize, DeviceError>;
// Provided method
fn erase_blocks(
&self,
start_block: usize,
num_blocks: usize,
) -> Result<usize, DeviceError> { ... }
}