pub trait Database {
// Required methods
fn add_segments(&mut self, segment: Vec<Segment>) -> HyperlitResult<()>;
fn get_all_segments(&self) -> HyperlitResult<Vec<&Segment>>;
fn get_segment_by_id(&self, id: SegmentId) -> HyperlitResult<&Segment>;
fn set_segment_included(&mut self, id: SegmentId) -> HyperlitResult<()>;
// Provided method
fn get_segments_by_tag(&self, tag: &str) -> HyperlitResult<Vec<&Segment>> { ... }
}