pub mod redb_store;
pub mod search;
use std::{path::Path, sync::Arc};
use anyhow::Result;
pub use redb_store::RedbStore;
pub use search::SearchIndex;
use tracing::info;
use crate::MemoryTier;
pub struct Store {
pub db: Arc<RedbStore>,
pub search: SearchIndex,
}
impl Store {
pub fn open(data_dir: &Path, tier: MemoryTier) -> Result<Self> {
let redb_dir = data_dir.join("redb");
let search_dir = data_dir.join("search");
std::fs::create_dir_all(&redb_dir)?;
std::fs::create_dir_all(&search_dir)?;
let db = Arc::new(RedbStore::open(&redb_dir.join("data.redb"), tier)?);
let search = SearchIndex::open(&search_dir, tier)?;
info!(
db_size = ?redb_dir, search_size = ?search_dir, tier = ?tier,
"store opened"
);
Ok(Self { db, search })
}
}