#[cfg(not(any(feature = "native", feature = "wasm")))] compile_error!("You need to enable one of native, wasm features"); #[cfg(all(feature = "native", feature = "wasm"))] compile_error!("You cannot enable both native and wasm features"); pub enum StkArgs { Client { server: String, }, #[cfg(not(target_arch = "wasm32"))] Server { management_bind: std::net::SocketAddr, native_bind: std::net::SocketAddr, wt_bind: std::net::SocketAddr, with_client: bool }, } #[cfg(not(target_arch = "wasm32"))] pub fn parse_args() -> StkArgs { let mut pargs = pico_args::Arguments::from_env(); if pargs.contains(["-h", "--help"]) { print_help(); std::process::exit(0); } if pargs.contains(["-v", "--version"]) { println!("{}", env!("CARGO_PKG_VERSION")); std::process::exit(0); } let Some(subcommand) = pargs.subcommand().unwrap() else { eprintln!("a subcommand is required"); print_help(); std::process::exit(1); }; match subcommand.as_str() { "client" => { StkArgs::Client { server: pargs.value_from_str(["-s", "--server"]).unwrap(), } }, #[cfg(not(target_arch = "wasm32"))] "server" => { StkArgs::Server { management_bind: pargs.value_from_str("--management-bind").unwrap(), native_bind: pargs.value_from_str("--native-bind").unwrap(), wt_bind: pargs.value_from_str("--wt-bind").unwrap(), with_client: pargs.contains("--with-client"), } }, unknown => { eprintln!("unknown subcommand: {unknown} (is that feature supported on this platform?)"); eprintln!("-h, --help for help"); std::process::exit(1); } } } fn print_help() { println!("\ USAGE: starkingdoms [FLAGS] [...] FLAGS: -h, --help Prints help information -v, --version Prints version information SUBCOMMANDS: "); println!(" client Run the client (see CLIENT for options)"); if cfg!(not(target_arch = "wasm32")) { println!(" server Run the server (see SERVER for options)"); } println!("\n"); println!("\ CLIENT: -s, --server Connection string of the server's management port (e.g. http://127.0.0.1:5150/) "); if cfg!(not(target_arch = "wasm32")) { print!("\ SERVER: --management-bind Socket address to bind the management port to --native-bind Socket address to bind the native (UDP) port to --wt-bind Socket address to bind the WebTransport port to --with-client Start a client connected to this server \n"); } }