1use async_trait::async_trait;
2
3use crate::error::TaskResult;
4use crate::message::TaskMessage;
5use crate::task_id::TaskId;
6
7#[async_trait]
9pub trait Broker: Send + Sync + 'static {
10 async fn enqueue(&self, message: TaskMessage) -> TaskResult<()>;
12
13 async fn dequeue(
16 &self,
17 queues: &[String],
18 timeout: std::time::Duration,
19 ) -> TaskResult<Option<TaskMessage>>;
20
21 async fn ack(&self, id: &TaskId) -> TaskResult<()>;
23
24 async fn nack(&self, message: TaskMessage) -> TaskResult<()>;
26
27 async fn dead_letter(&self, message: TaskMessage) -> TaskResult<()>;
29
30 async fn schedule(
32 &self,
33 message: TaskMessage,
34 eta: chrono::DateTime<chrono::Utc>,
35 ) -> TaskResult<()>;
36
37 async fn queue_len(&self, queue: &str) -> TaskResult<usize>;
39}