use anyhow::Result;
use clap::{Args, ValueEnum};
use kdl::KdlDocument;
use crate::Config;
#[derive(Debug, Args)]
pub struct ShowConfigArgs {
#[arg(short, long, value_enum, default_value_t = ConfigFormat::Kdl)]
format: ConfigFormat,
}
#[derive(Clone, Debug, Default, ValueEnum)]
pub enum ConfigFormat {
Toml,
Yaml,
Json,
#[default]
Kdl,
}
pub fn run(config: Config, args: &ShowConfigArgs) -> Result<()> {
let dump = match args.format {
ConfigFormat::Toml => toml::to_string(&config)?,
ConfigFormat::Json => serde_json::to_string(&config)?,
ConfigFormat::Yaml => serde_yaml::to_string(&config)?,
ConfigFormat::Kdl => {
let mut doc: KdlDocument = config.into();
doc.autoformat();
format!("{doc}")
}
};
println!("{dump}");
Ok(())
}