use std::collections::HashSet;
use crate::{
errors::SuperSTACError,
models::{
catalog::{Catalog, CatalogFilters, CatalogUpdate},
provider::{CatalogProvider, CatalogProviderFilters, CatalogProviderUpdate},
settings::{Settings, SettingsUpdate},
},
};
pub trait StorageBackend: Send + Sync {
fn update_settings(&self, update: SettingsUpdate);
fn get_settings(&self) -> Settings;
fn get_provider(&self, id: &str) -> Result<&CatalogProvider, SuperSTACError>;
fn create_provider(
&mut self,
provider: CatalogProvider,
) -> Result<CatalogProvider, SuperSTACError>;
fn delete_provider(&mut self, id: &str) -> Result<(), SuperSTACError>;
fn delete_providers(&mut self, ids: Vec<&str>) -> Result<(), SuperSTACError>;
fn list_providers(
&self,
filters: Option<CatalogProviderFilters>,
) -> Result<Vec<CatalogProvider>, SuperSTACError>;
fn update_provider(
&mut self,
id: &str,
update: CatalogProviderUpdate,
) -> Result<CatalogProvider, SuperSTACError>;
fn get_catalog(&self, id: &str) -> Result<&Catalog, SuperSTACError>;
fn update_catalog(
&mut self,
id: &str,
update: CatalogUpdate,
) -> Result<Catalog, SuperSTACError>;
fn create_catalog(
&mut self,
catalog: Catalog,
provider: Option<&str>,
) -> Result<Catalog, SuperSTACError>;
fn list_catalogs(
&self,
filters: Option<CatalogFilters>,
) -> Result<Vec<Catalog>, SuperSTACError>;
fn delete_catalog(&mut self, id: &str) -> Result<(), SuperSTACError>;
fn delete_catalogs(&mut self, ids: Vec<&str>) -> Result<(), SuperSTACError>;
fn update_health(&mut self, id: &str, healthy: bool) -> Result<(), SuperSTACError>;
fn update_supported_collections(
&mut self,
id: &str,
collections: Option<HashSet<String>>,
) -> Result<(), SuperSTACError>;
}