use crate::error::{Mecha10Error, Result};
use std::path::{Path, PathBuf};
use tokio::fs;
#[derive(Clone)]
pub struct FilesystemStateManager {
pub(super) base_path: PathBuf,
}
impl FilesystemStateManager {
pub async fn new<P: AsRef<Path>>(base_path: P) -> Result<Self> {
let base_path = base_path.as_ref().to_path_buf();
fs::create_dir_all(&base_path)
.await
.map_err(|e| Mecha10Error::IoError {
message: format!("Failed to create state directory: {}", e),
suggestion: "Check directory permissions".to_string(),
})?;
Ok(Self { base_path })
}
pub(super) fn state_path(&self, node_id: &str) -> PathBuf {
self.base_path.join(format!("{}.state.json", node_id))
}
pub(super) fn snapshot_path(&self, snapshot_id: &str) -> PathBuf {
self.base_path
.join("snapshots")
.join(format!("{}.snapshot.json", snapshot_id))
}
pub(super) fn snapshot_meta_path(&self, snapshot_id: &str) -> PathBuf {
self.base_path
.join("snapshots")
.join(format!("{}.meta.json", snapshot_id))
}
}