logisheets_parser 0.7.0

the parser of excel formula
Documentation
use logisheets_base::errors::BasicError;
use logisheets_base::get_book_name::GetBookNameTrait;
use logisheets_base::id_fetcher::{IdFetcherTrait, VertexFetcherTrait};
use logisheets_base::{
    Cube, CubeId, ExtBookId, ExtRef, ExtRefId, FuncId, NameId, NormalCellId, Range, RangeId,
    SheetId, TextId,
};

pub trait ContextTrait: IdFetcherTrait + GetBookNameTrait + VertexFetcherTrait {}

pub struct Context<'a, T, F>
where
    T: IdFetcherTrait,
    F: VertexFetcherTrait,
{
    pub book_name: &'a str,
    pub id_fetcher: &'a mut T,
    pub vertex_fetcher: &'a mut F,
}

impl<'a, T, F> ContextTrait for Context<'a, T, F>
where
    T: IdFetcherTrait,
    F: VertexFetcherTrait,
{
}

impl<'a, T, F> VertexFetcherTrait for Context<'a, T, F>
where
    T: IdFetcherTrait,
    F: VertexFetcherTrait,
{
    fn fetch_range_id(&mut self, sheet_id: &SheetId, range: &Range) -> RangeId {
        self.vertex_fetcher.fetch_range_id(sheet_id, range)
    }

    fn fetch_cube_id(&mut self, cube: &Cube) -> CubeId {
        self.vertex_fetcher.fetch_cube_id(cube)
    }

    fn fetch_ext_ref_id(&mut self, ext_ref: &ExtRef) -> ExtRefId {
        self.vertex_fetcher.fetch_ext_ref_id(ext_ref)
    }
}

impl<'a, T, F> GetBookNameTrait for Context<'a, T, F>
where
    T: IdFetcherTrait,
    F: VertexFetcherTrait,
{
    fn get_book_name(&self) -> &str {
        self.book_name
    }
}

impl<'a, T, F> IdFetcherTrait for Context<'a, T, F>
where
    T: IdFetcherTrait,
    F: VertexFetcherTrait,
{
    fn fetch_row_id(
        &self,
        sheet_id: &SheetId,
        row_idx: usize,
    ) -> std::result::Result<logisheets_base::RowId, BasicError> {
        self.id_fetcher.fetch_row_id(sheet_id, row_idx)
    }

    fn fetch_col_id(
        &self,
        sheet_id: &SheetId,
        col_idx: usize,
    ) -> std::result::Result<logisheets_base::ColId, BasicError> {
        self.id_fetcher.fetch_col_id(sheet_id, col_idx)
    }

    fn fetch_cell_id(
        &self,
        sheet_id: &SheetId,
        row_idx: usize,
        col_idx: usize,
    ) -> std::result::Result<logisheets_base::CellId, BasicError> {
        self.id_fetcher.fetch_cell_id(sheet_id, row_idx, col_idx)
    }

    fn fetch_sheet_id(&mut self, sheet_name: &str) -> SheetId {
        self.id_fetcher.fetch_sheet_id(sheet_name)
    }

    fn fetch_name_id(&mut self, workbook: &Option<&str>, name: &str) -> NameId {
        self.id_fetcher.fetch_name_id(workbook, name)
    }

    fn fetch_ext_book_id(&mut self, book: &str) -> ExtBookId {
        self.id_fetcher.fetch_ext_book_id(book)
    }

    fn fetch_text_id(&mut self, text: &str) -> TextId {
        self.id_fetcher.fetch_text_id(text)
    }

    fn fetch_func_id(&mut self, func_name: &str) -> FuncId {
        self.id_fetcher.fetch_func_id(func_name)
    }

    fn fetch_norm_cell_id(
        &self,
        sheet_id: &SheetId,
        row_idx: usize,
        col_idx: usize,
    ) -> std::result::Result<NormalCellId, BasicError> {
        self.id_fetcher
            .fetch_norm_cell_id(sheet_id, row_idx, col_idx)
    }

    fn fetch_block_cell_id(
        &self,
        sheet_id: &SheetId,
        block_id: &logisheets_base::BlockId,
        row: usize,
        col: usize,
    ) -> Result<logisheets_base::BlockCellId, BasicError> {
        self.id_fetcher
            .fetch_block_cell_id(sheet_id, block_id, row, col)
    }
}