use clap::{Parser, Subcommand}; use tcp_over_http::tcp_relay_client::client_config::ClientConfig; use tcp_over_http::tcp_relay_server::server_config::ServerConfig; #[derive(Parser, Debug)] #[clap( author, version, about, long_about = "Encapsulate TCP sockets inside HTTP WebSockets\nSource code: https://gitea.communiquons.org/pierre/tcp-over-http" )] struct CliArgs { #[clap(subcommand)] command: SubCommands, } #[derive(Subcommand, Debug)] enum SubCommands { /// Run as server Server(ServerConfig), /// Run as client Client(ClientConfig), } #[actix_web::main] async fn main() -> std::io::Result<()> { env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); let args: CliArgs = CliArgs::parse(); // Dispatch the request to the appropriate part of the program match args.command { SubCommands::Server(c) => tcp_over_http::tcp_relay_server::run_app(c).await, SubCommands::Client(c) => tcp_over_http::tcp_relay_client::run_app(c).await, } } #[cfg(test)] mod test { use crate::CliArgs; #[test] fn verify_cli() { use clap::CommandFactory; CliArgs::command().debug_assert() } }