mod env;
mod get;
mod reset;
mod set;
mod show;
use anyhow::Result;
use clap::{Args, Subcommand};
use opencode_cloud_core::Config;
pub use env::{EnvCommands, cmd_config_env};
pub use get::cmd_config_get;
pub use reset::cmd_config_reset;
pub use set::cmd_config_set;
pub use show::cmd_config_show;
#[derive(Args)]
pub struct ConfigArgs {
#[arg(long)]
json: bool,
#[command(subcommand)]
command: Option<ConfigSubcommands>,
}
#[derive(Subcommand)]
pub enum ConfigSubcommands {
Show {
#[arg(long)]
json: bool,
},
Get {
key: String,
},
Set {
key: String,
value: Option<String>,
#[arg(long)]
force: bool,
},
Reset {
#[arg(long, short)]
force: bool,
},
#[command(subcommand)]
Env(EnvCommands),
}
pub fn cmd_config(args: ConfigArgs, config: &Config, quiet: bool) -> Result<()> {
match args.command {
Some(ConfigSubcommands::Show { json }) => cmd_config_show(config, json, quiet),
Some(ConfigSubcommands::Get { key }) => cmd_config_get(config, &key, quiet),
Some(ConfigSubcommands::Set { key, value, force }) => {
cmd_config_set(&key, value.as_deref(), quiet, force)
}
Some(ConfigSubcommands::Reset { force }) => cmd_config_reset(force, quiet),
Some(ConfigSubcommands::Env(env_cmd)) => cmd_config_env(env_cmd, quiet),
None => {
cmd_config_show(config, args.json, quiet)
}
}
}