feat(domain): DomainError::is_transient() for retry classification

This commit is contained in:
2026-06-12 00:27:16 +02:00
parent 40cb15e7cb
commit 17d4de461b

View File

@@ -20,3 +20,44 @@ pub enum DomainError {
#[error("Forbidden: {0}")] #[error("Forbidden: {0}")]
Forbidden(String), Forbidden(String),
} }
impl DomainError {
pub fn is_transient(&self) -> bool {
matches!(self, DomainError::InfrastructureError(_))
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn infrastructure_error_is_transient() {
assert!(DomainError::InfrastructureError("network timeout".into()).is_transient());
}
#[test]
fn not_found_is_not_transient() {
assert!(!DomainError::NotFound("thing".into()).is_transient());
}
#[test]
fn validation_error_is_not_transient() {
assert!(!DomainError::ValidationError("bad input".into()).is_transient());
}
#[test]
fn unauthorized_is_not_transient() {
assert!(!DomainError::Unauthorized("token expired".into()).is_transient());
}
#[test]
fn forbidden_is_not_transient() {
assert!(!DomainError::Forbidden("no access".into()).is_transient());
}
#[test]
fn invalid_rating_is_not_transient() {
assert!(!DomainError::InvalidRating { max: 5, given: 9 }.is_transient());
}
}