Skip to main content

spreadsheet_mcp/repository/
mod.rs

1use crate::model::{WorkbookId, WorkbookListResponse};
2use crate::tools::filters::WorkbookFilter;
3use crate::workbook::WorkbookContext;
4use anyhow::Result;
5
6pub mod path_workspace;
7pub mod virtual_workspace;
8
9pub use path_workspace::PathWorkspaceRepository;
10pub use virtual_workspace::{VirtualWorkbookInput, VirtualWorkspaceRepository};
11
12#[derive(Debug, Clone)]
13pub enum WorkbookSource {
14    Path(std::path::PathBuf),
15    Virtual(String),
16}
17
18#[derive(Debug, Clone)]
19pub struct ResolvedWorkbookRef {
20    pub workbook_id: WorkbookId,
21    pub short_id: String,
22    pub revision_id: Option<String>,
23    pub source: WorkbookSource,
24}
25
26pub trait WorkbookRepository: Send + Sync {
27    fn list(&self, filter: &WorkbookFilter) -> Result<WorkbookListResponse>;
28    fn resolve(&self, id_or_alias: &WorkbookId) -> Result<ResolvedWorkbookRef>;
29    fn load_context(&self, resolved: &ResolvedWorkbookRef) -> Result<WorkbookContext>;
30}