1use lapin::types::FieldTable;
2
3pub mod amqp;
4
5#[async_trait::async_trait]
6pub trait MqClient: Send + Sync {
7 async fn new_consumer(
8 &self,
9 routing_key: &str,
10 worker_id: i32,
11 ) -> anyhow::Result<Box<dyn MqConsumer>>;
12 async fn new_publisher(&self, routing_key: &str) -> anyhow::Result<Box<dyn MqPublisher>>;
13}
14
15#[async_trait::async_trait]
16pub trait MqPublisher: Send + Sync {
17 async fn publish(&self, payload: &[u8]) -> anyhow::Result<()>;
18 async fn ensure_consumer(&self) -> anyhow::Result<()>;
19}
20
21#[async_trait::async_trait]
22pub trait MqConsumer: Send + Sync {
23 async fn next(&mut self) -> Option<anyhow::Result<Box<dyn MqPayload>>>;
24}
25
26#[async_trait::async_trait]
27pub trait MqPayload: Send + Sync {
28 async fn ack(&self) -> anyhow::Result<()>;
29 async fn nack_requeue(&self) -> anyhow::Result<()>;
30 fn get_headers(&self) -> Option<FieldTable>; fn data(&self) -> &[u8];
32}