use crate::error::DomainError;
use crate::events::{
DeliberationCompletedEvent, PhaseChangedEvent, TaskCompletedEvent, TaskDispatchedEvent,
TaskFailedEvent,
};
use async_trait::async_trait;
#[async_trait]
pub trait MessagingPort: Send + Sync {
async fn publish_task_dispatched(&self, event: &TaskDispatchedEvent)
-> Result<(), DomainError>;
async fn publish_task_completed(&self, event: &TaskCompletedEvent) -> Result<(), DomainError>;
async fn publish_task_failed(&self, event: &TaskFailedEvent) -> Result<(), DomainError>;
async fn publish_deliberation_completed(
&self,
event: &DeliberationCompletedEvent,
) -> Result<(), DomainError>;
async fn publish_phase_changed(&self, event: &PhaseChangedEvent) -> Result<(), DomainError>;
}