use std::fmt;
#[derive(thiserror::Error, Debug)]
pub enum WorkQueueError {
#[error("failed to create queue '{name}': {source}")]
Creation {
name: String,
#[source]
source: Box<dyn std::error::Error + Send + Sync>,
},
#[error("backend error: {0}")]
Backend(#[source] Box<dyn std::error::Error + Send + Sync>),
}
#[derive(thiserror::Error, Debug)]
pub enum WorkQueueSendError {
#[error("queue is closed")]
Closed,
#[error("queue is full")]
Full,
#[error("serialization error: {0}")]
Serialization(String),
#[error("backend error: {0}")]
Backend(#[source] Box<dyn std::error::Error + Send + Sync>),
}
#[derive(thiserror::Error)]
pub enum WorkQueueRecvError {
#[error("queue is closed")]
Closed,
#[error("deserialization error: {0}")]
Deserialization(String),
#[error("backend error: {0}")]
Backend(#[source] Box<dyn std::error::Error + Send + Sync>),
}
impl fmt::Debug for WorkQueueRecvError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Closed => write!(f, "Closed"),
Self::Deserialization(msg) => f.debug_tuple("Deserialization").field(msg).finish(),
Self::Backend(e) => f.debug_tuple("Backend").field(&e.to_string()).finish(),
}
}
}