hyperlit_database/
in_memory_database.rs1use crate::Database;
2use hyperlit_base::err;
3use hyperlit_base::result::HyperlitResult;
4use hyperlit_model::segment::{Segment, SegmentId};
5
6#[derive(Debug, Default)]
7pub struct InMemoryDatabase {
8 pub segments: Vec<Segment>,
9}
10
11impl InMemoryDatabase {
12 pub fn new() -> Self {
13 Self::default()
14 }
15
16 fn get_mut_segment_by_id(&mut self, id: SegmentId) -> HyperlitResult<&mut Segment> {
17 self.segments
18 .get_mut(id as usize)
19 .ok_or_else(|| err!("Segment with id {} not found", id))
20 }
21}
22
23impl Database for InMemoryDatabase {
24 fn add_segments(&mut self, segments: Vec<Segment>) -> HyperlitResult<()> {
25 let old_len = self.segments.len();
26 self.segments.extend(segments);
27 let mut index = old_len as u32;
28 for segment in self.segments.iter_mut().skip(old_len) {
29 segment.id = index;
30 index += 1;
31 }
32 Ok(())
33 }
34
35 fn get_all_segments(&self) -> HyperlitResult<Vec<&Segment>> {
36 Ok(self.segments.iter().collect())
37 }
38
39 fn get_segment_by_id(&self, id: SegmentId) -> HyperlitResult<&Segment> {
40 self.segments
41 .get(id as usize)
42 .ok_or_else(|| err!("Segment with id {} not found", id))
43 }
44
45 fn set_segment_included(&mut self, id: SegmentId) -> HyperlitResult<()> {
46 self.get_mut_segment_by_id(id)?.is_included = true;
47 Ok(())
48 }
49}