http-mtls-proxy 0.1.0

A fast minimalistic mTLS proxy.
Documentation
use std::sync::Arc;

use anyhow::Result;
use http_mtls_proxy::{create_server, Cli};
use log::{error, info, trace};
use tokio::task::spawn;

#[tokio::main]
async fn main() -> Result<()> {
	env_logger::init();
	trace!("Building router and ports");
	let (router, ports) = Cli::router_and_ports()?;

	let mut handles = Vec::new();

	for port in &ports {
		let router = Arc::clone(&router);
		let port = port.clone();
		trace!("Spawning server on port {port}");
		handles.push(spawn(async move {
			if let Err(err) = create_server(port, router).await {
				error!("Error on port {port}: {err}");
			}
		}))
	}

	info!(
		"Listening on ports: {}",
		ports.iter().map(|port| port.to_string()).collect::<Vec<_>>().join(", ")
	);

	for handle in handles {
		handle.await?;
	}

	Ok(())
}