Skip to main content

butterflow_state/
lib.rs

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/// State adapter trait for persisting workflow state
14#[async_trait]
15pub trait StateAdapter: Send + Sync {
16    /// Save a workflow run
17    async fn save_workflow_run(&mut self, workflow_run: &WorkflowRun) -> Result<()>;
18
19    /// Apply a diff to a workflow run
20    async fn apply_workflow_run_diff(&mut self, diff: &WorkflowRunDiff) -> Result<()>;
21
22    /// Get a workflow run
23    async fn get_workflow_run(&self, workflow_run_id: Uuid) -> Result<WorkflowRun>;
24
25    /// List workflow runs
26    async fn list_workflow_runs(&self, limit: usize) -> Result<Vec<WorkflowRun>>;
27
28    /// Save a task
29    async fn save_task(&mut self, task: &Task) -> Result<()>;
30
31    /// Apply a diff to a task
32    async fn apply_task_diff(&mut self, diff: &TaskDiff) -> Result<()>;
33
34    /// Get a task
35    async fn get_task(&self, task_id: Uuid) -> Result<Task>;
36
37    /// Get all tasks for a workflow run
38    async fn get_tasks(&self, workflow_run_id: Uuid) -> Result<Vec<Task>>;
39
40    /// Update workflow state
41    async fn update_state(
42        &mut self,
43        workflow_run_id: Uuid,
44        state: HashMap<String, Value>,
45    ) -> Result<()>;
46
47    /// Apply a diff to workflow state
48    async fn apply_state_diff(&mut self, diff: &StateDiff) -> Result<()>;
49
50    /// Get workflow state
51    async fn get_state(&self, workflow_run_id: Uuid) -> Result<HashMap<String, Value>>;
52}