use std::collections::HashMap;
use serde::{Deserialize, Serialize};
use crate::model::types::Message;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckpointState {
pub run_id: String,
pub messages: Vec<Message>,
pub iteration: usize,
pub completed: bool,
pub metadata: HashMap<String, serde_json::Value>,
pub created_at: u64,
}
impl CheckpointState {
pub fn new(run_id: impl Into<String>, messages: Vec<Message>, iteration: usize) -> Self {
let now = std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap_or_default()
.as_secs();
Self {
run_id: run_id.into(),
messages,
iteration,
completed: false,
metadata: HashMap::new(),
created_at: now,
}
}
pub fn mark_completed(mut self) -> Self {
self.completed = true;
self
}
pub fn with_metadata(mut self, key: impl Into<String>, value: serde_json::Value) -> Self {
self.metadata.insert(key.into(), value);
self
}
}