use serde::{Deserialize, Serialize};
use crate::enums::TaskState;
mod memory;
mod fs;
pub use memory::InMemoryStateStore;
pub use fs::FsStateStore;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PersistedTaskState {
pub task_id: String,
pub last_run_timestamp_secs: Option<u64>,
pub last_success_timestamp_secs: Option<u64>,
pub failure_count: usize,
pub current_attempt: usize,
pub current_state: TaskState,
}
#[async_trait::async_trait]
pub trait TaskStateStore: Send + Sync {
async fn save_state(&self, state: PersistedTaskState) -> anyhow::Result<()>;
async fn load_state(&self, task_id: &str) -> anyhow::Result<Option<PersistedTaskState>>;
async fn load_all_states(&self) -> anyhow::Result<Vec<PersistedTaskState>>;
async fn delete_state(&self, task_id: &str) -> anyhow::Result<()>;
}