use async_trait::async_trait;
use serde::{Deserialize, Serialize};
use uuid::Uuid;
use cognis_core::Result;
use crate::state::GraphState;
mod in_memory;
pub use in_memory::InMemoryCheckpointer;
pub mod serializer;
#[cfg(feature = "serializer-cbor")]
pub use serializer::CborSerializer;
pub use serializer::{CheckpointSerializer, JsonSerializer};
#[cfg(feature = "sqlite")]
pub mod sqlite;
#[cfg(feature = "sqlite")]
pub use sqlite::SqliteCheckpointer;
#[cfg(feature = "postgres")]
pub mod postgres;
#[cfg(feature = "postgres")]
pub use postgres::PostgresCheckpointer;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ActiveSnapshot {
pub node_name: String,
pub payload: Option<serde_json::Value>,
}
#[async_trait]
pub trait Checkpointer<S: GraphState>: Send + Sync {
async fn save(&self, run_id: Uuid, step: u64, state: &S) -> Result<()>;
async fn load(&self, run_id: Uuid, step: Option<u64>) -> Result<Option<S>>;
async fn list(&self, run_id: Uuid) -> Result<Vec<u64>>;
async fn save_active(&self, run_id: Uuid, step: u64, active: &[ActiveSnapshot]) -> Result<()> {
let _ = (run_id, step, active);
Ok(())
}
async fn load_active(&self, run_id: Uuid, step: u64) -> Result<Vec<ActiveSnapshot>> {
let _ = (run_id, step);
Ok(Vec::new())
}
}