1use std::collections::HashMap;
2
3use async_trait::async_trait;
4use serde_json::Value;
5use uuid::Uuid;
6
7use butterflow_models::{Result, StateDiff, Task, TaskDiff, WorkflowRun, WorkflowRunDiff};
8
9pub mod cloud_adapter;
10pub mod local_adapter;
11pub mod mock_adapter;
12
13#[async_trait]
15pub trait StateAdapter: Send + Sync {
16 async fn save_workflow_run(&mut self, workflow_run: &WorkflowRun) -> Result<()>;
18
19 async fn apply_workflow_run_diff(&mut self, diff: &WorkflowRunDiff) -> Result<()>;
21
22 async fn get_workflow_run(&self, workflow_run_id: Uuid) -> Result<WorkflowRun>;
24
25 async fn list_workflow_runs(&self, limit: usize) -> Result<Vec<WorkflowRun>>;
27
28 async fn save_task(&mut self, task: &Task) -> Result<()>;
30
31 async fn apply_task_diff(&mut self, diff: &TaskDiff) -> Result<()>;
33
34 async fn get_task(&self, task_id: Uuid) -> Result<Task>;
36
37 async fn get_tasks(&self, workflow_run_id: Uuid) -> Result<Vec<Task>>;
39
40 async fn update_state(
42 &mut self,
43 workflow_run_id: Uuid,
44 state: HashMap<String, Value>,
45 ) -> Result<()>;
46
47 async fn apply_state_diff(&mut self, diff: &StateDiff) -> Result<()>;
49
50 async fn get_state(&self, workflow_run_id: Uuid) -> Result<HashMap<String, Value>>;
52}