feat(domain): DomainError::is_transient() for retry classification
This commit is contained in:
@@ -20,3 +20,44 @@ pub enum DomainError {
|
||||
#[error("Forbidden: {0}")]
|
||||
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());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user