flatland3 0.2.12

Flatland3 terminal play client and account CLI
Documentation
//! Shared client connection settings (`~/.config/flatland/client.json`).

use clap::Subcommand;
use flatland_client_lib::{default_api_base_url, default_game_server_addr, ClientConfig};

#[derive(Debug, Subcommand)]
pub enum ConfigCommand {
    /// Set game server host (gateway :7373, API :7380 by default)
    SetHost {
        host: String,
        #[arg(long)]
        game_port: Option<u16>,
        #[arg(long)]
        api_port: Option<u16>,
    },
    /// Print saved connection settings
    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(())
        }
    }
}