use crate::error::MetadataError;
use crate::model::{Profile, Project, ProjectId, ProjectVar, Var, VarFilter, VarId};
pub trait MetadataStore: Send + Sync {
fn upsert_var(&self, var: &Var) -> Result<(), MetadataError>;
fn get_var(&self, id: VarId) -> Result<Option<Var>, MetadataError>;
fn find_var_by_name(&self, name: &str) -> Result<Option<Var>, MetadataError>;
fn list_vars(&self, filter: &VarFilter) -> Result<Vec<Var>, MetadataError>;
fn delete_var(&self, id: VarId) -> Result<(), MetadataError>;
fn get_plain_value(&self, id: VarId) -> Result<Option<String>, MetadataError>;
fn set_plain_value(&self, id: VarId, value: &str) -> Result<(), MetadataError>;
fn upsert_project(&self, project: &Project) -> Result<(), MetadataError>;
fn get_project(&self, id: ProjectId) -> Result<Option<Project>, MetadataError>;
fn list_projects(&self) -> Result<Vec<Project>, MetadataError>;
fn delete_project(&self, id: ProjectId) -> Result<(), MetadataError>;
fn upsert_link(&self, link: &ProjectVar) -> Result<(), MetadataError>;
fn delete_link(
&self,
project_id: ProjectId,
var_id: VarId,
profile: &Profile,
) -> Result<bool, MetadataError>;
fn list_links_for_project(
&self,
project_id: ProjectId,
) -> Result<Vec<ProjectVar>, MetadataError>;
fn list_links_for_var(&self, var_id: VarId) -> Result<Vec<ProjectVar>, MetadataError>;
}