hyperlit_model/
database.rs1use crate::segment::{Segment, SegmentId};
2use hyperlit_base::result::HyperlitResult;
3
4pub trait Database {
5 fn add_segments(&mut self, segment: Vec<Segment>) -> HyperlitResult<()>;
6
7 fn get_all_segments(&self) -> HyperlitResult<Vec<&Segment>>;
8 fn get_segment_by_id(&self, id: SegmentId) -> HyperlitResult<&Segment>;
9
10 fn get_segments_by_tag(&self, tag: &str) -> HyperlitResult<Vec<&Segment>> {
11 Ok(self
12 .get_all_segments()?
13 .into_iter()
14 .filter(|segment| segment.tags.iter().any(|segment_tag| segment_tag == tag))
15 .collect())
16 }
17
18 fn set_segment_included(&mut self, id: SegmentId) -> HyperlitResult<()>;
19}
20
21pub type DatabaseBox = Box<dyn Database>;