use async_trait::async_trait;
use turul_a2a_types::{Task, TaskStatus};
use crate::streaming::StreamEvent;
use super::error::A2aStorageError;
#[async_trait]
pub trait A2aAtomicStore: Send + Sync {
fn backend_name(&self) -> &'static str;
async fn create_task_with_events(
&self,
tenant: &str,
owner: &str,
task: Task,
events: Vec<StreamEvent>,
) -> Result<(Task, Vec<u64>), A2aStorageError>;
async fn update_task_status_with_events(
&self,
tenant: &str,
task_id: &str,
owner: &str,
new_status: TaskStatus,
events: Vec<StreamEvent>,
) -> Result<(Task, Vec<u64>), A2aStorageError>;
async fn update_task_with_events(
&self,
tenant: &str,
owner: &str,
task: Task,
events: Vec<StreamEvent>,
) -> Result<Vec<u64>, A2aStorageError>;
}