use async_trait::async_trait;
use crate::error::{KojinError, TaskResult};
use crate::task_id::TaskId;
#[async_trait]
pub trait ResultBackend: Send + Sync + 'static {
async fn store(&self, id: &TaskId, result: &serde_json::Value) -> TaskResult<()>;
async fn get(&self, id: &TaskId) -> TaskResult<Option<serde_json::Value>>;
async fn wait(
&self,
id: &TaskId,
timeout: std::time::Duration,
) -> TaskResult<serde_json::Value>;
async fn delete(&self, id: &TaskId) -> TaskResult<()>;
async fn init_group(&self, _group_id: &str, _total: u32) -> TaskResult<()> {
Err(KojinError::ResultBackend(
"group operations not supported by this backend".into(),
))
}
async fn complete_group_member(
&self,
_group_id: &str,
_task_id: &TaskId,
_result: &serde_json::Value,
) -> TaskResult<u32> {
Err(KojinError::ResultBackend(
"group operations not supported by this backend".into(),
))
}
async fn get_group_results(&self, _group_id: &str) -> TaskResult<Vec<serde_json::Value>> {
Err(KojinError::ResultBackend(
"group operations not supported by this backend".into(),
))
}
}