hyperlit-database 0.1.0

A software documentation tool documentation embedded in source files - database crate
Documentation
use crate::Database;
use hyperlit_base::err;
use hyperlit_base::result::HyperlitResult;
use hyperlit_model::segment::{Segment, SegmentId};

#[derive(Debug, Default)]
pub struct InMemoryDatabase {
    pub segments: Vec<Segment>,
}

impl InMemoryDatabase {
    pub fn new() -> Self {
        Self::default()
    }

    fn get_mut_segment_by_id(&mut self, id: SegmentId) -> HyperlitResult<&mut Segment> {
        self.segments
            .get_mut(id as usize)
            .ok_or_else(|| err!("Segment with id {} not found", id))
    }
}

impl Database for InMemoryDatabase {
    fn add_segments(&mut self, segments: Vec<Segment>) -> HyperlitResult<()> {
        let old_len = self.segments.len();
        self.segments.extend(segments);
        let mut index = old_len as u32;
        for segment in self.segments.iter_mut().skip(old_len) {
            segment.id = index;
            index += 1;
        }
        Ok(())
    }

    fn get_all_segments(&self) -> HyperlitResult<Vec<&Segment>> {
        Ok(self.segments.iter().collect())
    }

    fn get_segment_by_id(&self, id: SegmentId) -> HyperlitResult<&Segment> {
        self.segments
            .get(id as usize)
            .ok_or_else(|| err!("Segment with id {} not found", id))
    }

    fn set_segment_included(&mut self, id: SegmentId) -> HyperlitResult<()> {
        self.get_mut_segment_by_id(id)?.is_included = true;
        Ok(())
    }
}