error_forge/recovery/
forge_extensions.rs

1use crate::error::ForgeError;
2use crate::recovery::{RetryPolicy, CircuitBreaker};
3
4/// Extension trait that adds recovery capabilities to ForgeError types
5pub trait ForgeErrorRecovery: ForgeError {
6    /// Create a retry policy optimized for this error type
7    fn create_retry_policy(&self, max_retries: usize) -> RetryPolicy {
8        RetryPolicy::new_exponential()
9            .with_max_retries(max_retries)
10    }
11
12    /// Execute a fallible operation with retries if this error type is retryable
13    fn retry<F, T, E>(&self, max_retries: usize, operation: F) -> Result<T, E>
14    where
15        F: FnMut() -> Result<T, E>,
16        E: ForgeError,
17    {
18        let policy = self.create_retry_policy(max_retries);
19        policy.forge_executor().retry(operation)
20    }
21
22    /// Create a circuit breaker for operations that might result in this error type
23    fn create_circuit_breaker(&self, name: impl Into<String>) -> CircuitBreaker {
24        CircuitBreaker::new(name)
25    }
26}
27
28// Implement the extension trait for all ForgeError types
29impl<T: ForgeError> ForgeErrorRecovery for T {}