QuickDID is a high-performance AT Protocol identity resolution service written in Rust. It provides handle-to-DID resolution with Redis-backed caching and queue processing.
1//! Queue operation error types.
2//!
3//! This module defines the error types that can occur during queue operations,
4//! including push failures, serialization issues, and backend-specific errors.
5
6use thiserror::Error;
7
8/// Queue operation errors.
9///
10/// These errors represent various failure modes that can occur when working
11/// with queue adapters, from connection issues to serialization problems.
12#[derive(Error, Debug)]
13pub enum QueueError {
14 /// Failed to push an item to the queue.
15 #[error("error-quickdid-queue-1 Failed to push to queue: {0}")]
16 PushFailed(String),
17
18 /// The queue is full and cannot accept new items.
19 #[error("error-quickdid-queue-2 Queue is full")]
20 QueueFull,
21
22 /// The queue has been closed and is no longer accepting items.
23 #[error("error-quickdid-queue-3 Queue is closed")]
24 QueueClosed,
25
26 /// Redis connection failed.
27 #[error("error-quickdid-queue-4 Redis connection failed: {0}")]
28 RedisConnectionFailed(String),
29
30 /// Redis operation failed.
31 #[error("error-quickdid-queue-5 Redis operation failed: {operation}: {details}")]
32 RedisOperationFailed {
33 /// The Redis operation that failed
34 operation: String,
35 /// Details about the failure
36 details: String,
37 },
38
39 /// Failed to serialize an item for storage.
40 #[error("error-quickdid-queue-6 Serialization failed: {0}")]
41 SerializationFailed(String),
42
43 /// Failed to deserialize an item from storage.
44 #[error("error-quickdid-queue-7 Deserialization failed: {0}")]
45 DeserializationFailed(String),
46
47 /// Item not found in worker queue during acknowledgment.
48 #[error("error-quickdid-queue-8 Item not found in worker queue during acknowledgment")]
49 AckItemNotFound,
50}
51
52/// Result type alias for queue operations.
53pub type Result<T> = std::result::Result<T, QueueError>;
54
55#[cfg(test)]
56mod tests {
57 use super::*;
58
59 #[test]
60 fn test_error_messages() {
61 let err = QueueError::PushFailed("test failure".to_string());
62 assert!(err.to_string().contains("error-quickdid-queue-1"));
63 assert!(err.to_string().contains("test failure"));
64
65 let err = QueueError::QueueFull;
66 assert_eq!(err.to_string(), "error-quickdid-queue-2 Queue is full");
67
68 let err = QueueError::RedisOperationFailed {
69 operation: "LPUSH".to_string(),
70 details: "connection timeout".to_string(),
71 };
72 assert!(err.to_string().contains("error-quickdid-queue-5"));
73 assert!(err.to_string().contains("LPUSH"));
74 assert!(err.to_string().contains("connection timeout"));
75 }
76}