use mocra::prelude::proxy::{DirectProxy, PoolConfig, ProxyConfig, ProxyManager};
#[tokio::main]
async fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
let mut pool_config = PoolConfig::default();
pool_config.health_check_interval_secs = 0;
let config = ProxyConfig {
direct: Some(vec![
DirectProxy {
name: Some("proxy-a".into()),
url: "http://127.0.0.1:18080".into(),
rate_limit: Some(0.0),
expire_time: None,
},
DirectProxy {
name: Some("proxy-b".into()),
url: "http://127.0.0.1:18081".into(),
rate_limit: Some(0.0),
expire_time: None,
},
]),
tunnel: None,
ip_provider: None,
pool_config: Some(pool_config),
};
let manager = ProxyManager::from_proxy_config(&config).await?;
let first = manager.get_proxy_for_attempt(None).await?;
manager.begin_proxy_attempt(&first).await?;
manager.report_failure(&first).await?;
println!("first attempt used {first}; simulated failure");
let next = manager.get_proxy_for_attempt(Some(&first)).await?;
manager.begin_proxy_attempt(&next).await?;
manager.report_success(&next, None).await?;
println!("retry selected {next}; simulated success");
println!("pool status: {:?}", manager.get_status().await);
Ok(())
}