pub trait Package {
type BlockIterator: Iterator<Item = Block>;
// Required methods
fn cid(&self) -> &Cid;
fn total_size(&self) -> u64;
fn into_blocks(self) -> Self::BlockIterator;
// Provided method
fn link(&self, name: String) -> PbLink { ... }
}