error_forge/recovery/
forge_extensions.rs1use crate::error::ForgeError;
2use crate::recovery::{CircuitBreaker, RetryPolicy};
3
4pub trait ForgeErrorRecovery: ForgeError {
6 fn create_retry_policy(&self, max_retries: usize) -> RetryPolicy {
8 RetryPolicy::new_exponential().with_max_retries(max_retries)
9 }
10
11 fn retry<F, T, E>(&self, max_retries: usize, operation: F) -> Result<T, E>
13 where
14 F: FnMut() -> Result<T, E>,
15 E: ForgeError,
16 {
17 let policy = self.create_retry_policy(max_retries);
18 policy.forge_executor().retry(operation)
19 }
20
21 fn create_circuit_breaker(&self, name: impl Into<String>) -> CircuitBreaker {
23 CircuitBreaker::new(name)
24 }
25}
26
27impl<T: ForgeError> ForgeErrorRecovery for T {}