error_forge/recovery/
forge_extensions.rs1use crate::error::ForgeError;
2use crate::recovery::{RetryPolicy, CircuitBreaker};
3
4pub trait ForgeErrorRecovery: ForgeError {
6 fn create_retry_policy(&self, max_retries: usize) -> RetryPolicy {
8 RetryPolicy::new_exponential()
9 .with_max_retries(max_retries)
10 }
11
12 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 fn create_circuit_breaker(&self, name: impl Into<String>) -> CircuitBreaker {
24 CircuitBreaker::new(name)
25 }
26}
27
28impl<T: ForgeError> ForgeErrorRecovery for T {}