metalmq_codec/frame/
queue.rs

1use super::{AMQPFrame, Channel, FieldTable, MethodFrameArgs};
2
3bitflags! {
4    pub struct QueueDeclareFlags: u8 {
5        const PASSIVE = 0b00000001;
6        const DURABLE = 0b00000010;
7        const EXCLUSIVE = 0b00000100;
8        const AUTO_DELETE = 0b00001000;
9        const NO_WAIT = 0b00010000;
10    }
11}
12
13impl Default for QueueDeclareFlags {
14    fn default() -> Self {
15        QueueDeclareFlags::empty()
16    }
17}
18
19#[derive(Debug, Default)]
20pub struct QueueDeclareArgs {
21    pub name: String,
22    pub flags: QueueDeclareFlags,
23    pub args: Option<FieldTable>,
24}
25
26impl QueueDeclareArgs {
27    pub fn name(mut self, name: &str) -> Self {
28        self.name = name.to_string();
29        self
30    }
31
32    pub fn auto_delete(mut self, mode: bool) -> Self {
33        self.flags.set(QueueDeclareFlags::AUTO_DELETE, mode);
34        self
35    }
36
37    pub fn durable(mut self, mode: bool) -> Self {
38        self.flags.set(QueueDeclareFlags::DURABLE, mode);
39        self
40    }
41
42    pub fn exclusive(mut self, mode: bool) -> Self {
43        self.flags.set(QueueDeclareFlags::EXCLUSIVE, mode);
44        self
45    }
46
47    pub fn passive(mut self, mode: bool) -> Self {
48        self.flags.set(QueueDeclareFlags::PASSIVE, mode);
49        self
50    }
51
52    pub fn frame(self, channel: Channel) -> AMQPFrame {
53        AMQPFrame::Method(channel, super::QUEUE_DECLARE, MethodFrameArgs::QueueDeclare(self))
54    }
55}
56
57#[derive(Debug, Default)]
58pub struct QueueDeclareOkArgs {
59    pub name: String,
60    pub message_count: u32,
61    pub consumer_count: u32,
62}
63
64impl QueueDeclareOkArgs {
65    pub fn name(mut self, name: &str) -> Self {
66        self.name = name.to_string();
67        self
68    }
69
70    pub fn consumer_count(mut self, consumer_count: u32) -> Self {
71        self.consumer_count = consumer_count;
72        self
73    }
74
75    pub fn message_count(mut self, message_count: u32) -> Self {
76        self.message_count = message_count;
77        self
78    }
79
80    pub fn frame(self, channel: Channel) -> AMQPFrame {
81        AMQPFrame::Method(channel, super::QUEUE_DECLARE_OK, MethodFrameArgs::QueueDeclareOk(self))
82    }
83}
84
85#[derive(Debug, Default)]
86pub struct QueueBindArgs {
87    pub queue_name: String,
88    pub exchange_name: String,
89    pub routing_key: String,
90    pub no_wait: bool,
91    pub args: Option<FieldTable>,
92}
93
94impl QueueBindArgs {
95    pub fn new(queue_name: &str, exchange_name: &str) -> Self {
96        Self {
97            queue_name: queue_name.to_string(),
98            exchange_name: exchange_name.to_string(),
99            ..Default::default()
100        }
101    }
102
103    pub fn routing_key(mut self, routing_key: &str) -> Self {
104        self.routing_key = routing_key.to_string();
105        self
106    }
107
108    pub fn frame(self, channel: Channel) -> AMQPFrame {
109        AMQPFrame::Method(channel, super::QUEUE_BIND, MethodFrameArgs::QueueBind(self))
110    }
111}
112
113#[derive(Debug, Default)]
114pub struct QueuePurgeArgs {
115    pub queue_name: String,
116    pub no_wait: bool,
117}
118
119impl QueuePurgeArgs {
120    pub fn queue_name(mut self, queue_name: &str) -> Self {
121        self.queue_name = queue_name.to_string();
122        self
123    }
124
125    pub fn frame(self, channel: Channel) -> AMQPFrame {
126        AMQPFrame::Method(channel, super::QUEUE_PURGE, MethodFrameArgs::QueuePurge(self))
127    }
128}
129
130#[derive(Debug, Default)]
131pub struct QueuePurgeOkArgs {
132    pub message_count: u32,
133}
134
135impl QueuePurgeOkArgs {
136    pub fn message_count(mut self, message_count: u32) -> Self {
137        self.message_count = message_count;
138        self
139    }
140}
141
142bitflags! {
143    pub struct QueueDeleteFlags: u8 {
144        const IF_UNUSED = 0b00000001;
145        const IF_EMPTY = 0b00000010;
146        const NO_WAIT = 0b00000100;
147    }
148}
149
150impl Default for QueueDeleteFlags {
151    fn default() -> Self {
152        QueueDeleteFlags::empty()
153    }
154}
155
156#[derive(Debug, Default)]
157pub struct QueueDeleteArgs {
158    pub queue_name: String,
159    pub flags: QueueDeleteFlags,
160}
161
162impl QueueDeleteArgs {
163    pub fn queue_name(mut self, queue_name: &str) -> Self {
164        self.queue_name = queue_name.to_string();
165        self
166    }
167
168    pub fn if_empty(mut self, mode: bool) -> Self {
169        self.flags.set(QueueDeleteFlags::IF_EMPTY, mode);
170        self
171    }
172
173    pub fn if_unused(mut self, mode: bool) -> Self {
174        self.flags.set(QueueDeleteFlags::IF_UNUSED, mode);
175        self
176    }
177
178    pub fn frame(self, channel: Channel) -> AMQPFrame {
179        AMQPFrame::Method(channel, super::QUEUE_DELETE, MethodFrameArgs::QueueDelete(self))
180    }
181}
182
183#[derive(Debug, Default)]
184pub struct QueueDeleteOkArgs {
185    pub message_count: u32,
186}
187
188impl QueueDeleteOkArgs {
189    pub fn message_count(mut self, message_count: u32) -> Self {
190        self.message_count = message_count;
191        self
192    }
193
194    pub fn frame(self, channel: Channel) -> AMQPFrame {
195        AMQPFrame::Method(channel, super::QUEUE_DELETE_OK, MethodFrameArgs::QueueDeleteOk(self))
196    }
197}
198
199#[derive(Debug, Default)]
200pub struct QueueUnbindArgs {
201    pub queue_name: String,
202    pub exchange_name: String,
203    pub routing_key: String,
204    pub args: Option<FieldTable>,
205}
206
207impl QueueUnbindArgs {
208    pub fn new(queue_name: &str, exchange_name: &str) -> Self {
209        Self {
210            queue_name: queue_name.to_string(),
211            exchange_name: exchange_name.to_string(),
212            ..Default::default()
213        }
214    }
215
216    pub fn routing_key(mut self, routing_key: &str) -> Self {
217        self.routing_key = routing_key.to_string();
218        self
219    }
220
221    pub fn frame(self, channel: Channel) -> AMQPFrame {
222        AMQPFrame::Method(channel, super::QUEUE_UNBIND, MethodFrameArgs::QueueUnbind(self))
223    }
224}
225
226pub fn queue_bind_ok(channel: Channel) -> AMQPFrame {
227    AMQPFrame::Method(channel, super::QUEUE_BIND_OK, MethodFrameArgs::QueueBindOk)
228}