pub trait MemoryWrite {
// Required methods
fn write(&mut self, data: &[u8]) -> Result<(), AccessError>;
fn fill(&mut self, val: u8, len: usize) -> Result<(), AccessError>;
fn len(&self) -> usize;
// Provided methods
fn zero(&mut self, len: usize) -> Result<(), AccessError> { ... }
fn limit(self, len: usize) -> Limit<Self>
where Self: Sized { ... }
}