use std::path::Path;
use crate::domain::{
config::{ConfigError, WorkspaceConfig},
project::Project,
};
pub trait ProjectRegistry {
fn projects(&self) -> Result<Vec<Project>, ConfigError>;
fn workspace(&self, config_path: &Path) -> Result<WorkspaceConfig, ConfigError>;
fn workspace_exists(&self, config_path: &Path) -> bool;
fn save(&self, projects: &[Project]) -> Result<(), ConfigError>;
fn save_workspace(
&self,
config_path: &Path,
config: &WorkspaceConfig,
) -> Result<(), ConfigError>;
fn update_workspace(
&self,
config_path: &Path,
update: &mut dyn FnMut(WorkspaceConfig) -> WorkspaceConfig,
) -> Result<(), ConfigError> {
let config = self.workspace(config_path)?;
self.save_workspace(config_path, &update(config))
}
}