use clap::Subcommand;
use flatland_client_lib::{default_api_base_url, default_game_server_addr, ClientConfig};
#[derive(Debug, Subcommand)]
pub enum ConfigCommand {
SetHost {
host: String,
#[arg(long)]
game_port: Option<u16>,
#[arg(long)]
api_port: Option<u16>,
},
Show,
}
pub fn run(command: ConfigCommand) -> anyhow::Result<()> {
match command {
ConfigCommand::SetHost {
host,
game_port,
api_port,
} => {
let mut cfg = ClientConfig::load();
cfg.set_game_host(host)?;
if let Some(port) = game_port {
cfg.game_port = Some(port);
}
if let Some(port) = api_port {
cfg.api_port = Some(port);
}
cfg.save()?;
let cfg = ClientConfig::load();
println!("Game server: {}", cfg.game_server_addr());
println!("API base: {}", cfg.api_base_url());
Ok(())
}
ConfigCommand::Show => {
let cfg = ClientConfig::load();
match cfg.game_host {
Some(ref host) => {
println!("game_host: {host}");
println!("game_port: {}", cfg.game_port.unwrap_or(7373));
println!("api_port: {}", cfg.api_port.unwrap_or(7380));
}
None => println!("game_host: (default localhost)"),
}
println!("resolved game server: {}", default_game_server_addr());
println!("resolved API base: {}", default_api_base_url());
Ok(())
}
}
}