feat(domain): DomainError::is_transient() for retry classification
This commit is contained in:
@@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user