foxtive_supervisor/persistence/
mod.rs1use serde::{Deserialize, Serialize};
2use crate::enums::TaskState;
3
4mod memory;
5mod fs;
6
7pub use memory::InMemoryStateStore;
8pub use fs::FsStateStore;
9
10#[derive(Debug, Clone, Serialize, Deserialize)]
12pub struct PersistedTaskState {
13 pub task_id: String,
14 pub last_run_timestamp_secs: Option<u64>,
15 pub last_success_timestamp_secs: Option<u64>,
16 pub failure_count: usize,
17 pub current_attempt: usize,
18 pub current_state: TaskState,
19}
20
21#[async_trait::async_trait]
23pub trait TaskStateStore: Send + Sync {
24 async fn save_state(&self, state: PersistedTaskState) -> anyhow::Result<()>;
26
27 async fn load_state(&self, task_id: &str) -> anyhow::Result<Option<PersistedTaskState>>;
29
30 async fn load_all_states(&self) -> anyhow::Result<Vec<PersistedTaskState>>;
32
33 async fn delete_state(&self, task_id: &str) -> anyhow::Result<()>;
35}