hyperlit_model/
database.rs

1use 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>;