use std::io::Write as _;
use clap_complete::ArgValueCandidates;
use jj_lib::config::ConfigNamePathBuf;
use jj_lib::config::ConfigValue;
use tracing::instrument;
use crate::cli_util::CommandHelper;
use crate::command_error::CommandError;
use crate::complete;
use crate::ui::Ui;
#[derive(clap::Args, Clone, Debug)]
#[command(verbatim_doc_comment)]
pub struct ConfigGetArgs {
#[arg(required = true)]
#[arg(add = ArgValueCandidates::new(complete::leaf_config_keys))]
name: ConfigNamePathBuf,
}
#[instrument(skip_all)]
pub async fn cmd_config_get(
ui: &mut Ui,
command: &CommandHelper,
args: &ConfigGetArgs,
) -> Result<(), CommandError> {
let value = command.settings().get_value(&args.name)?;
let stringified = match value {
ConfigValue::String(v) => v.into_value(),
ConfigValue::Integer(_)
| ConfigValue::Float(_)
| ConfigValue::Boolean(_)
| ConfigValue::Datetime(_)
| ConfigValue::Array(_)
| ConfigValue::InlineTable(_) => value.decorated("", "").to_string(),
};
writeln!(ui.stdout(), "{stringified}")?;
Ok(())
}