mod common;
mod lance;
mod surreal;
use serde::{Deserialize, Serialize};
use crate::StorageError;
pub use common::CommonConfig;
pub use lance::LanceConfig;
pub use surreal::{SurrealConfig, SurrealModeConfig};
#[derive(Clone, Debug, Serialize, Deserialize)]
pub enum DatabaseConfig {
Lance {
config: LanceConfig,
common: CommonConfig,
},
Surreal {
config: SurrealConfig,
common: CommonConfig,
},
}
impl DatabaseConfig {
#[must_use]
pub fn lance(config: LanceConfig) -> Self {
Self::Lance {
config,
common: CommonConfig::default(),
}
}
#[must_use]
pub fn surreal(config: SurrealConfig) -> Self {
Self::Surreal {
config,
common: CommonConfig::default(),
}
}
#[must_use]
pub fn with_common(self, common: CommonConfig) -> Self {
match self {
Self::Lance { config, .. } => Self::Lance { config, common },
Self::Surreal { config, .. } => Self::Surreal { config, common },
}
}
#[must_use]
pub fn common(&self) -> &CommonConfig {
match self {
Self::Lance { common, .. } | Self::Surreal { common, .. } => common,
}
}
pub fn validate(&self) -> Result<(), StorageError> {
self.common().validate()?;
match self {
Self::Lance { config, .. } => config.validate(),
Self::Surreal { config, .. } => config.validate(),
}
}
}
impl From<LanceConfig> for DatabaseConfig {
fn from(config: LanceConfig) -> Self {
Self::lance(config)
}
}
impl From<SurrealConfig> for DatabaseConfig {
fn from(config: SurrealConfig) -> Self {
Self::surreal(config)
}
}