use std::{net::SocketAddr, path::PathBuf};
use clap::{Parser, ValueEnum};
use ws2tcp_local_core::{ProxyMode, SettingsOverrides};
#[derive(Debug, Parser)]
#[command(
name = "ws2tcp-local",
version,
about = "Local HTTP proxy for ws2tcp-router"
)]
pub struct Args {
#[arg(long)]
pub config: Option<PathBuf>,
#[arg(long)]
pub listen: Option<SocketAddr>,
#[arg(long)]
pub gateway: Option<String>,
#[arg(long)]
pub basic_auth: Option<String>,
#[arg(long)]
pub buffer_size: Option<usize>,
#[arg(long)]
pub log_level: Option<String>,
#[arg(long)]
pub custom_domain_rules: Option<PathBuf>,
#[arg(long)]
pub rule_refresh_interval_secs: Option<u64>,
#[arg(long)]
pub proxy_mode: Option<CliProxyMode>,
#[arg(long)]
pub verify_server_certificate: bool,
}
#[derive(Debug, Clone, Copy, ValueEnum)]
pub enum CliProxyMode {
Auto,
Global,
}
impl From<CliProxyMode> for ProxyMode {
fn from(mode: CliProxyMode) -> Self {
match mode {
CliProxyMode::Auto => Self::Auto,
CliProxyMode::Global => Self::Global,
}
}
}
impl From<Args> for SettingsOverrides {
fn from(args: Args) -> Self {
Self {
config: args.config,
listen: args.listen,
gateway: args.gateway,
basic_auth: args.basic_auth,
buffer_size: args.buffer_size,
log_level: args.log_level,
custom_domain_rules: args.custom_domain_rules,
rule_refresh_interval_secs: args.rule_refresh_interval_secs,
proxy_mode: args.proxy_mode.map(Into::into),
verify_server_certificate: args.verify_server_certificate,
}
}
}