apalis_core/mq/
mod.rs

1//! # Message queue
2//!
3//! The `mq` module provides an abstraction for representing a message queue that supports pushing and consuming messages. It defines the MessageQueue trait, which can be implemented by different types of message queues.
4
5use futures::{Future, FutureExt};
6
7use crate::{backend::Backend, request::Request};
8
9/// Represents a message queue that can be pushed and consumed.
10pub trait MessageQueue<Message: Send>: Backend<Request<Message, Self::Context>> {
11    /// This stores more data about the Message,
12    /// provided by the backend
13    type Context: Default;
14    /// The error produced by the queue
15    type Error;
16
17    /// The format that the storage persists the jobs usually `Vec<u8>`
18    type Compact;
19
20    /// Enqueues a message to the queue.
21    fn enqueue(
22        &mut self,
23        message: Message,
24    ) -> impl Future<Output = Result<(), Self::Error>> + Send {
25        self.enqueue_request(Request::new(message))
26    }
27
28    /// Enqueues a Request constructed with customizations
29    fn enqueue_request(
30        &mut self,
31        req: Request<Message, Self::Context>,
32    ) -> impl Future<Output = Result<(), Self::Error>> + Send;
33
34    /// Enqueues a request without forcing the type
35    fn enqueue_raw_request(
36        &mut self,
37        req: Request<Self::Compact, Self::Context>,
38    ) -> impl Future<Output = Result<(), Self::Error>> + Send;
39
40    /// Attempts to dequeue a message from the queue.
41    /// Returns `None` if the queue is empty.
42    fn dequeue(&mut self) -> impl Future<Output = Result<Option<Message>, Self::Error>> + Send {
43        self.dequeue_request()
44            .map(|req| req.map(|r| r.map(|r| r.args)))
45    }
46
47    /// Attempts to dequeue a message from the queue.
48    /// Returns `None` if the queue is empty.
49    fn dequeue_request(
50        &mut self,
51    ) -> impl Future<Output = Result<Option<Request<Message, Self::Context>>, Self::Error>> + Send;
52
53    /// Returns the current size of the queue.
54    fn size(&mut self) -> impl Future<Output = Result<usize, Self::Error>> + Send;
55}