metalmq_codec/frame/
queue.rs1use 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}