use super::{FilePersistence, StorageConfig, StorageManager};
use crate::Result;
use std::path::PathBuf;
use std::sync::Arc;
pub struct StorageManagerBuilder {
config: Option<StorageConfig>,
persistence_path: Option<PathBuf>,
}
impl StorageManagerBuilder {
pub fn new() -> Self {
Self {
config: None,
persistence_path: None,
}
}
pub fn with_config(mut self, config: StorageConfig) -> Self {
self.config = Some(config);
self
}
pub fn with_persistence(mut self, path: PathBuf) -> Self {
self.persistence_path = Some(path);
self
}
pub async fn build(self) -> Result<Arc<StorageManager>> {
let config = self.config.unwrap_or_default();
let persistence = if let Some(path) = self.persistence_path {
Some(FilePersistence::new(path).await?)
} else {
None
};
let manager = StorageManager::new(config, persistence);
let arc_manager = Arc::new(manager);
arc_manager.spawn_autosave_tasks().await;
Ok(arc_manager)
}
}
impl Default for StorageManagerBuilder {
fn default() -> Self {
Self::new()
}
}