pub mod traits;
pub mod sqlite;
pub mod error;
pub mod config;
pub mod embeddings;
pub mod memory_pools;
#[cfg(feature = "astra")]
pub mod astra;
pub use traits::*;
pub use error::*;
pub use config::*;
pub use embeddings::*;
pub use memory_pools::*;
use async_trait::async_trait;
use std::sync::Arc;
#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
#[serde(rename_all = "lowercase")]
pub enum DatabaseBackend {
Sqlite,
#[cfg(feature = "astra")]
Astra,
}
pub async fn create_database(config: DatabaseConfig) -> Result<Arc<dyn Database>, DatabaseError> {
match config.backend {
DatabaseBackend::Sqlite => {
let db = sqlite::SqliteDatabase::new(config).await?;
Ok(Arc::new(db))
}
#[cfg(feature = "astra")]
DatabaseBackend::Astra => {
let db = astra::AstraDatabase::new(config).await?;
Ok(Arc::new(db))
}
}
}
pub async fn create_memory_pools(config: DatabaseConfig) -> Result<Arc<dyn MemoryPoolManager>, DatabaseError> {
match config.backend {
DatabaseBackend::Sqlite => {
let pools = memory_pools::SqliteMemoryPools::new(config).await?;
Ok(Arc::new(pools))
}
#[cfg(feature = "astra")]
DatabaseBackend::Astra => {
let pools = memory_pools::AstraMemoryPools::new(config).await?;
Ok(Arc::new(pools))
}
}
}
#[cfg(test)]
mod tests;