later/mq/
mod.rs

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>; // ToDo: do not leak lapin
31    fn data(&self) -> &[u8];
32}