pub trait PartMap {
// Required methods
fn position_part_containing_offset(&self, offset: usize) -> Option<usize>;
fn get_part_at_idx(&self, part_idx: usize) -> Option<Part>;
fn append_part_with_part_size(&mut self, part_size: usize) -> Part;
fn len(&self) -> usize;
fn truncate(&mut self, offset: usize) -> Option<(usize, usize, Part)>;
fn clear(&mut self);
// Provided methods
fn get_part_containing_offset(&self, offset: usize) -> Option<Part> { ... }
fn is_empty(&self) -> bool { ... }
fn size(&self) -> usize { ... }
}