1use futures::{Future, FutureExt};
6
7use crate::{backend::Backend, request::Request};
8
9pub trait MessageQueue<Message: Send>: Backend<Request<Message, Self::Context>> {
11 type Context: Default;
14 type Error;
16
17 type Compact;
19
20 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 fn enqueue_request(
30 &mut self,
31 req: Request<Message, Self::Context>,
32 ) -> impl Future<Output = Result<(), Self::Error>> + Send;
33
34 fn enqueue_raw_request(
36 &mut self,
37 req: Request<Self::Compact, Self::Context>,
38 ) -> impl Future<Output = Result<(), Self::Error>> + Send;
39
40 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 fn dequeue_request(
50 &mut self,
51 ) -> impl Future<Output = Result<Option<Request<Message, Self::Context>>, Self::Error>> + Send;
52
53 fn size(&mut self) -> impl Future<Output = Result<usize, Self::Error>> + Send;
55}