server/service_bus_manager/responses.rs
1use super::types::{OperationStats, QueueInfo, QueueType};
2use crate::bulk_operations::{BulkOperationResult, MessageIdentifier};
3use crate::model::MessageModel;
4
5/// Response types for Service Bus operations.
6///
7/// This enum represents all possible responses from [`ServiceBusCommand`] operations
8/// executed through the [`ServiceBusManager`]. Each response variant corresponds to
9/// a specific command type and contains the relevant data or status information.
10///
11/// # Response Categories
12///
13/// - **Queue Management** - Information about queue switches, statistics, and current state
14/// - **Message Retrieval** - Retrieved messages in various formats
15/// - **Individual Operations** - Confirmations for single message operations
16/// - **Bulk Operations** - Results from bulk processing with detailed statistics
17/// - **Send Operations** - Confirmations and statistics for message sending
18/// - **Status Operations** - Connection health and queue status information
19/// - **Resource Management** - Confirmations for cleanup operations
20/// - **Generic Results** - Success confirmations and error responses
21///
22/// # Examples
23///
24/// ```no_run
25/// use quetty_server::service_bus_manager::{ServiceBusResponse, ServiceBusManager};
26///
27/// match manager.execute_command(command).await {
28/// ServiceBusResponse::MessagesReceived { messages } => {
29/// println!("Received {} messages", messages.len());
30/// for message in messages {
31/// println!("Message: {}", message.id);
32/// }
33/// }
34/// ServiceBusResponse::QueueSwitched { queue_info } => {
35/// println!("Switched to queue: {}", queue_info.name);
36/// }
37/// ServiceBusResponse::Error { error } => {
38/// eprintln!("Operation failed: {}", error);
39/// }
40/// _ => println!("Operation completed successfully"),
41/// }
42/// ```
43#[derive(Debug)]
44pub enum ServiceBusResponse {
45 /// Successful queue switch operation.
46 ///
47 /// Returned when a [`SwitchQueue`] command completes successfully.
48 QueueSwitched {
49 /// Information about the newly active queue
50 queue_info: QueueInfo,
51 },
52
53 /// Information about the currently active queue.
54 ///
55 /// Returned by [`GetCurrentQueue`] command.
56 CurrentQueue {
57 /// Current queue information, or None if no queue is active
58 queue_info: Option<QueueInfo>,
59 },
60
61 /// Detailed statistics for a specific queue.
62 ///
63 /// Returned by [`GetQueueStatistics`] command with comprehensive metrics.
64 QueueStatistics {
65 /// Name of the queue
66 queue_name: String,
67 /// Type of the queue (Queue or Topic)
68 queue_type: QueueType,
69 /// Number of active messages in the queue
70 active_message_count: Option<u64>,
71 /// Number of messages in the dead letter queue
72 dead_letter_message_count: Option<u64>,
73 /// Timestamp when statistics were retrieved
74 retrieved_at: chrono::DateTime<chrono::Utc>,
75 },
76
77 /// Messages retrieved via peek operations.
78 ///
79 /// Contains parsed message models from [`PeekMessages`] command.
80 MessagesReceived {
81 /// List of parsed message models
82 messages: Vec<MessageModel>,
83 },
84
85 /// Raw messages received with locks for processing.
86 ///
87 /// Contains native Service Bus message objects from [`ReceiveMessages`] command.
88 ReceivedMessages {
89 /// List of raw Service Bus messages with locks
90 messages: Vec<azservicebus::ServiceBusReceivedMessage>,
91 },
92
93 /// Confirmation that a message was completed successfully.
94 MessageCompleted {
95 /// ID of the completed message
96 message_id: String,
97 },
98
99 /// Confirmation that a message was abandoned.
100 MessageAbandoned {
101 /// ID of the abandoned message
102 message_id: String,
103 },
104
105 /// Confirmation that a message was moved to dead letter queue.
106 MessageDeadLettered {
107 /// ID of the dead lettered message
108 message_id: String,
109 },
110
111 /// Result of a bulk operation with comprehensive statistics.
112 ///
113 /// Used for complex bulk operations like delete, send, etc.
114 BulkOperationCompleted {
115 /// Detailed operation results and statistics
116 result: BulkOperationResult,
117 },
118
119 /// Result of bulk message completion operation.
120 BulkMessagesCompleted {
121 /// List of successfully completed message identifiers
122 successful_ids: Vec<MessageIdentifier>,
123 /// List of failed message identifiers
124 failed_ids: Vec<MessageIdentifier>,
125 /// Operation timing and performance statistics
126 stats: OperationStats,
127 },
128
129 /// Result of bulk message abandon operation.
130 BulkMessagesAbandoned {
131 /// List of successfully abandoned message identifiers
132 successful_ids: Vec<MessageIdentifier>,
133 /// List of failed message identifiers
134 failed_ids: Vec<MessageIdentifier>,
135 /// Operation timing and performance statistics
136 stats: OperationStats,
137 },
138
139 /// Result of bulk dead letter operation.
140 BulkMessagesDeadLettered {
141 /// List of successfully dead lettered message identifiers
142 successful_ids: Vec<MessageIdentifier>,
143 /// List of failed message identifiers
144 failed_ids: Vec<MessageIdentifier>,
145 /// Operation timing and performance statistics
146 stats: OperationStats,
147 },
148
149 /// Confirmation that a single message was sent successfully.
150 MessageSent {
151 /// Name of the target queue where message was sent
152 queue_name: String,
153 },
154
155 /// Confirmation that multiple messages were sent successfully.
156 MessagesSent {
157 /// Name of the target queue where messages were sent
158 queue_name: String,
159 /// Number of messages sent
160 count: usize,
161 /// Operation timing and performance statistics
162 stats: OperationStats,
163 },
164
165 /// Current connection status and health information.
166 ConnectionStatus {
167 /// Whether the connection is currently active
168 connected: bool,
169 /// Information about the currently active queue
170 current_queue: Option<QueueInfo>,
171 /// Last error message, if any
172 last_error: Option<String>,
173 },
174
175 /// Basic statistics for a specific queue.
176 QueueStats {
177 /// Name of the queue
178 queue_name: String,
179 /// Number of messages in the queue
180 message_count: Option<u64>,
181 /// Whether there is an active consumer for this queue
182 active_consumer: bool,
183 },
184
185 /// Confirmation that the consumer was disposed successfully.
186 ConsumerDisposed,
187
188 /// Confirmation that all resources were disposed successfully.
189 AllResourcesDisposed,
190
191 /// Confirmation that resources were disposed successfully.
192 ResourcesDisposed,
193
194 /// Confirmation that the connection was reset successfully.
195 ConnectionReset,
196
197 /// Generic success response for operations without specific data.
198 Success,
199
200 /// Error response containing detailed error information.
201 ///
202 /// Returned when any operation fails with comprehensive error details.
203 Error {
204 /// The specific error that occurred
205 error: super::errors::ServiceBusError,
206 },
207}