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}