pub trait Flash {
type Error;
// Required methods
fn read(&mut self, addr: u32, buf: &mut [u8]) -> Result<(), Self::Error>;
fn write(&mut self, addr: u32, data: &mut [u8]) -> Result<(), Self::Error>;
fn erase(&mut self, addr: u32) -> Result<(), Self::Error>;
// Provided method
fn erase_all(&mut self, count: usize) -> Result<(), Self::Error> { ... }
}