made_core/ports/
messaging.rs1use async_trait::async_trait;
9use serde::{de::DeserializeOwned, Serialize};
10
11use crate::error::DomainError;
12use crate::events::{
13 DeliberationCompletedEvent, PhaseChangedEvent, TaskCompletedEvent, TaskDispatchedEvent,
14 TaskFailedEvent,
15};
16
17pub trait DomainEvent: Serialize + DeserializeOwned + Send + Sync + 'static {}
22
23impl DomainEvent for TaskDispatchedEvent {}
24impl DomainEvent for TaskCompletedEvent {}
25impl DomainEvent for TaskFailedEvent {}
26impl DomainEvent for DeliberationCompletedEvent {}
27impl DomainEvent for PhaseChangedEvent {}
28
29#[async_trait]
33pub trait SubscriptionHandler<E: DomainEvent>: Send + Sync {
34 async fn handle(&self, event: E) -> Result<(), DomainError>;
35}
36
37#[async_trait]
42pub trait MessagingPort: Send + Sync {
43 async fn publish_task_dispatched(&self, event: &TaskDispatchedEvent)
44 -> Result<(), DomainError>;
45 async fn publish_task_completed(&self, event: &TaskCompletedEvent) -> Result<(), DomainError>;
46 async fn publish_task_failed(&self, event: &TaskFailedEvent) -> Result<(), DomainError>;
47 async fn publish_deliberation_completed(
48 &self,
49 event: &DeliberationCompletedEvent,
50 ) -> Result<(), DomainError>;
51 async fn publish_phase_changed(&self, event: &PhaseChangedEvent) -> Result<(), DomainError>;
52}