//! Queue operation error types. //! //! This module defines the error types that can occur during queue operations, //! including push failures, serialization issues, and backend-specific errors. use thiserror::Error; /// Queue operation errors. /// /// These errors represent various failure modes that can occur when working /// with queue adapters, from connection issues to serialization problems. #[derive(Error, Debug)] pub enum QueueError { /// Failed to push an item to the queue. #[error("error-quickdid-queue-1 Failed to push to queue: {0}")] PushFailed(String), /// The queue is full and cannot accept new items. #[error("error-quickdid-queue-2 Queue is full")] QueueFull, /// The queue has been closed and is no longer accepting items. #[error("error-quickdid-queue-3 Queue is closed")] QueueClosed, /// Redis connection failed. #[error("error-quickdid-queue-4 Redis connection failed: {0}")] RedisConnectionFailed(String), /// Redis operation failed. #[error("error-quickdid-queue-5 Redis operation failed: {operation}: {details}")] RedisOperationFailed { /// The Redis operation that failed operation: String, /// Details about the failure details: String, }, /// Failed to serialize an item for storage. #[error("error-quickdid-queue-6 Serialization failed: {0}")] SerializationFailed(String), /// Failed to deserialize an item from storage. #[error("error-quickdid-queue-7 Deserialization failed: {0}")] DeserializationFailed(String), /// Item not found in worker queue during acknowledgment. #[error("error-quickdid-queue-8 Item not found in worker queue during acknowledgment")] AckItemNotFound, } /// Result type alias for queue operations. pub type Result = std::result::Result; #[cfg(test)] mod tests { use super::*; #[test] fn test_error_messages() { let err = QueueError::PushFailed("test failure".to_string()); assert!(err.to_string().contains("error-quickdid-queue-1")); assert!(err.to_string().contains("test failure")); let err = QueueError::QueueFull; assert_eq!(err.to_string(), "error-quickdid-queue-2 Queue is full"); let err = QueueError::RedisOperationFailed { operation: "LPUSH".to_string(), details: "connection timeout".to_string(), }; assert!(err.to_string().contains("error-quickdid-queue-5")); assert!(err.to_string().contains("LPUSH")); assert!(err.to_string().contains("connection timeout")); } }