pub mod bulkhead;
pub mod circuit_breaker;
pub mod config;
#[cfg(feature = "enhanced")]
pub mod enhanced;
pub mod retry;
pub mod standard;
pub mod stubs;
use crate::config::Config;
use crate::traits::{
DynCircuitBreaker, DynRetryStrategy, HealthCheckTrait, RecoveryStrategyTrait, ResilienceFactory,
};
use anyhow::Result;
use std::sync::Arc;
pub use bulkhead::{BulkheadTrait, BulkheadWrapper, DynBulkhead};
pub use standard::StandardResilienceFactory;
pub fn create_circuit_breaker(config: &Config) -> Result<Arc<dyn DynCircuitBreaker>> {
let factory = create_resilience_factory(config);
factory.create_circuit_breaker(config)
}
pub fn create_bulkhead(config: &Config) -> Result<Arc<dyn DynBulkhead>> {
let factory = create_resilience_factory(config);
factory.create_bulkhead(config)
}
pub fn create_retry_strategy(config: &Config) -> Result<Arc<dyn DynRetryStrategy>> {
let factory = create_resilience_factory(config);
factory.create_retry_strategy(config)
}
pub fn create_health_checker(config: &Config) -> Result<Arc<dyn HealthCheckTrait>> {
let factory = create_resilience_factory(config);
factory.create_health_checker(config)
}
pub fn create_recovery_strategy(config: &Config) -> Result<Arc<dyn RecoveryStrategyTrait>> {
let factory = create_resilience_factory(config);
factory.create_recovery_strategy(config)
}
fn create_resilience_factory(config: &Config) -> Box<dyn ResilienceFactory> {
if config.resilience.enhanced_mode {
tracing::info!("Resilience mode: enhanced");
#[cfg(feature = "enhanced")]
{
Box::new(enhanced::EnhancedResilienceFactory)
}
#[cfg(not(feature = "enhanced"))]
{
tracing::warn!("Enhanced mode requested but feature not enabled, using standard");
Box::new(StandardResilienceFactory)
}
} else {
tracing::info!("Resilience mode: standard");
Box::new(StandardResilienceFactory)
}
}
#[cfg(test)]
mod tests {}