use std::{net::SocketAddr, path::PathBuf};
use clap::{Parser, ValueEnum};
use serde::Deserialize;
pub(crate) const DEFAULT_BUFFER_SIZE: usize = 16 * 1024;
pub(crate) const DEFAULT_LISTEN: &str = "127.0.0.1:8000";
pub(crate) const DEFAULT_RULE_REFRESH_INTERVAL_SECS: u64 = 60;
#[derive(Debug, Parser)]
#[command(
name = "ws2tcp-local",
version,
about = "Local HTTP proxy for ws2tcp-router"
)]
pub(crate) struct Args {
#[arg(long)]
pub(crate) config: Option<PathBuf>,
#[arg(long)]
pub(crate) listen: Option<SocketAddr>,
#[arg(long)]
pub(crate) gateway: Option<String>,
#[arg(long)]
pub(crate) basic_auth: Option<String>,
#[arg(long)]
pub(crate) buffer_size: Option<usize>,
#[arg(long)]
pub(crate) log_level: Option<String>,
#[arg(long)]
pub(crate) custom_domain_rules: Option<PathBuf>,
#[arg(long)]
pub(crate) rule_refresh_interval_secs: Option<u64>,
#[arg(long)]
pub(crate) proxy_mode: Option<ProxyMode>,
#[arg(long)]
pub(crate) verify_server_certificate: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Deserialize, ValueEnum)]
#[serde(rename_all = "kebab-case")]
pub(crate) enum ProxyMode {
Auto,
Global,
}