iocaine 3.0.0

The deadliest poison known to AI
Documentation
// SPDX-FileCopyrightText: 2025 Gergely Nagy
// SPDX-FileContributor: Gergely Nagy
//
// SPDX-License-Identifier: MIT

use anyhow::Result;
use clap::{Args, ValueEnum};
use kdl::KdlDocument;

use crate::Config;

#[derive(Debug, Args)]
pub struct ShowConfigArgs {
    /// File format to render the configuration into.
    #[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(())
}