pub struct SaveHelper<'a, T>(pub &'a T);
pub trait SnapshotSaveFallback {
fn snapshot_save(&self) -> Result<super::SnapshotData, String>;
}
impl<T> SnapshotSaveFallback for SaveHelper<'_, T> {
fn snapshot_save(&self) -> Result<super::SnapshotData, String> {
Err("snapshot not implemented: agent type does not implement serde::Serialize + serde::de::DeserializeOwned".to_string())
}
}
impl<T: serde::Serialize> SaveHelper<'_, T> {
pub fn snapshot_save(&self) -> Result<super::SnapshotData, String> {
let data = serde_json::to_vec(self.0)
.map_err(|e| format!("Failed to serialize agent snapshot: {}", e))?;
Ok(super::SnapshotData::Json(data))
}
}