1pub mod traits;
13pub mod sqlite;
14pub mod error;
15pub mod config;
16pub mod embeddings;
17pub mod memory_pools;
18
19#[cfg(feature = "astra")]
20pub mod astra;
21
22pub use traits::*;
23pub use error::*;
24pub use config::*;
25pub use embeddings::*;
26pub use memory_pools::*;
27
28use async_trait::async_trait;
29use std::sync::Arc;
30
31#[derive(Debug, Clone, Copy, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
33#[serde(rename_all = "lowercase")]
34pub enum DatabaseBackend {
35 Sqlite,
36 #[cfg(feature = "astra")]
37 Astra,
38}
39
40pub async fn create_database(config: DatabaseConfig) -> Result<Arc<dyn Database>, DatabaseError> {
42 match config.backend {
43 DatabaseBackend::Sqlite => {
44 let db = sqlite::SqliteDatabase::new(config).await?;
45 Ok(Arc::new(db))
46 }
47 #[cfg(feature = "astra")]
48 DatabaseBackend::Astra => {
49 let db = astra::AstraDatabase::new(config).await?;
50 Ok(Arc::new(db))
51 }
52 }
53}
54
55pub async fn create_memory_pools(config: DatabaseConfig) -> Result<Arc<dyn MemoryPoolManager>, DatabaseError> {
57 match config.backend {
58 DatabaseBackend::Sqlite => {
59 let pools = memory_pools::SqliteMemoryPools::new(config).await?;
60 Ok(Arc::new(pools))
61 }
62 #[cfg(feature = "astra")]
63 DatabaseBackend::Astra => {
64 let pools = memory_pools::AstraMemoryPools::new(config).await?;
65 Ok(Arc::new(pools))
66 }
67 }
68}
69
70#[cfg(test)]
71mod tests;