tirea_contract/storage/
run_traits.rs1use async_trait::async_trait;
2
3use super::{RunPage, RunQuery, RunRecord, RunStoreError};
4
5#[async_trait]
6pub trait RunReader: Send + Sync {
7 async fn load_run(&self, run_id: &str) -> Result<Option<RunRecord>, RunStoreError>;
9
10 async fn list_runs(&self, query: &RunQuery) -> Result<RunPage, RunStoreError>;
12
13 async fn resolve_thread_id(&self, run_id: &str) -> Result<Option<String>, RunStoreError> {
15 Ok(self.load_run(run_id).await?.map(|r| r.thread_id))
16 }
17
18 async fn load_current_run(&self, thread_id: &str) -> Result<Option<RunRecord>, RunStoreError>;
23}
24
25#[async_trait]
26pub trait RunWriter: RunReader {
27 async fn upsert_run(&self, record: &RunRecord) -> Result<(), RunStoreError>;
29
30 async fn delete_run(&self, run_id: &str) -> Result<(), RunStoreError>;
32}
33
34pub trait RunStore: RunWriter {}
36
37impl<T: RunWriter + ?Sized> RunStore for T {}