use std::env;
use std::sync::Arc;
use crate::{CelerixStore, Result};
use crate::engine::{MemStore, Persistence};
use crate::sdk::Client;
pub async fn new(data_dir: &str) -> Result<Arc<dyn CelerixStore>> {
if let Ok(addr) = env::var("CELERIX_STORE_ADDR") {
if !addr.is_empty() {
if env::var("CELERIX_DISABLE_TLS").unwrap_or_default() != "true" {
log::warn!("Rust implementation currently only supports plain TCP. Please set CELERIX_DISABLE_TLS=true.");
}
if let Ok(client) = Client::connect(&addr).await {
return Ok(Arc::new(client));
}
}
}
let persistence = Arc::new(Persistence::new(data_dir)?);
let initial_data = persistence.load_all()?;
let store = MemStore::new(initial_data, Some(persistence));
Ok(Arc::new(store))
}