proxy_http 0.1.9

Async HTTP proxy server in Rust. / Rust 异步 HTTP 代理服务器。
Documentation
#[global_allocator]
static GLOBAL: mimalloc::MiMalloc = mimalloc::MiMalloc;


use aok::{OK, Void};
use clap_args::arg;
use proxy_fetch::load;

#[static_init::constructor(0)]
extern "C" fn _log_init() {
  log_init::init();
  rustls::crypto::aws_lc_rs::default_provider()
    .install_default()
    .unwrap();
}

genv::def!(PROXY_SUBSCRITION_URL, PROXY_USER, PROXY_PASSWORD);

#[tokio::main]
async fn main() -> Void {
  if let Some(matches) = clap_args::parse!(|cmd| {
    cmd.arg(arg!(-b --bind [BIND] "http proxy bind address").default_value("0.0.0.0:15080"))
  }) {
    let bind_addr = matches.get_one::<String>("bind").unwrap();
    println!(
      "{} v{} {bind_addr}",
      env!("CARGO_PKG_NAME"),
      env!("CARGO_PKG_VERSION"),
    );
    let fetch = load(PROXY_SUBSCRITION_URL::<String>().split(";")).await?;
    let addr = bind_addr.parse()?;
    proxy_http::run(
      fetch,
      addr,
      PROXY_USER::<String>(),
      PROXY_PASSWORD::<String>(),
    )
    .await?;
  }
  OK
}