use easy_http_proxy_server::{ProxyServer, ProxyConfig};
use clap::Parser;
use std::net::SocketAddr;
use log::info;
#[derive(Parser, Debug)]
#[command(name = "easy-http-proxy-server")]
#[command(about = "A simple HTTP/HTTPS proxy server with connection pooling", long_about = None)]
struct Args {
#[arg(long, default_value = "127.0.0.1")]
host: String,
#[arg(short, long, default_value = "3128")]
port: u16,
#[arg(short, long)]
verbose: bool,
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let args = Args::parse();
if args.verbose {
env_logger::Builder::from_default_env()
.filter_level(log::LevelFilter::Debug)
.init();
} else {
env_logger::Builder::from_default_env()
.filter_level(log::LevelFilter::Info)
.init();
}
let addr: SocketAddr = format!("{}:{}", args.host, args.port).parse()?;
let config = ProxyConfig::new(addr, args.verbose);
let server = ProxyServer::new(config);
info!("Starting HTTP Proxy Server on http://{}", addr);
info!("Verbose logging: {}", args.verbose);
server.run().await?;
Ok(())
}