idx-cli/src/cli/config.rs
2026-03-05 19:34:47 +00:00

45 lines
1.3 KiB
Rust

use clap::{Args, Subcommand};
use crate::config::{config_path, ensure_default_config, get_config_value, set_config_value};
use crate::error::IdxError;
#[derive(Debug, Args)]
#[command(about = "Manage configuration")]
pub struct ConfigCmd {
#[command(subcommand)]
pub command: ConfigSubcommand,
}
#[derive(Debug, Subcommand)]
pub enum ConfigSubcommand {
#[command(about = "Create default configuration file")]
Init,
#[command(about = "Get a configuration value by key")]
Get { key: String },
#[command(about = "Set a configuration value by key")]
Set { key: String, value: String },
#[command(about = "Print configuration file path")]
Path,
}
pub fn handle(cmd: &ConfigCmd) -> Result<(), IdxError> {
match &cmd.command {
ConfigSubcommand::Init => {
let path = ensure_default_config()?;
println!("{}", path.display());
}
ConfigSubcommand::Get { key } => {
let value = get_config_value(key)?
.ok_or_else(|| IdxError::ConfigError(format!("key not found: {key}")))?;
println!("{value}");
}
ConfigSubcommand::Set { key, value } => {
set_config_value(key, value)?;
println!("ok");
}
ConfigSubcommand::Path => {
println!("{}", config_path()?.display());
}
}
Ok(())
}