use thiserror::Error;
#[derive(Error, Debug)]
pub enum StoreError {
#[error("Storage backend error: {0}")]
Backend(String),
#[error("Entry not found: {0}")]
NotFound(String),
#[error("Serialization error: {0}")]
Serialization(String),
#[error("Invalid configuration: {0}")]
Config(String),
}
impl StoreError {
pub fn is_retryable(&self) -> bool {
match self {
StoreError::Backend(_) => true,
StoreError::NotFound(_) => false,
StoreError::Serialization(_) => false,
StoreError::Config(_) => false,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_backend_is_retryable() {
assert!(StoreError::Backend("transient".into()).is_retryable());
}
#[test]
fn test_not_found_not_retryable() {
assert!(!StoreError::NotFound("missing".into()).is_retryable());
}
#[test]
fn test_debug_display() {
let e = StoreError::Backend("db down".into());
assert_eq!(format!("{}", e), "Storage backend error: db down");
}
}