cleanlib-cli 0.1.0

Terminal interface to CleanLibrary — query dependency verdicts and scan package manifests for ALLOW / DENY / WARN signals from the terminal or CI pipelines.
//! `cleanlib risk-accept` (cycle-7 Cli2). Migrates `cmd_risk_accept` from
//! `main.rs`.

use std::path::PathBuf;

use anyhow::Result;
use cleanlib_client::risk_acceptance;

pub fn run(
    package: String,
    version: String,
    justification: String,
    proposed_by: Option<String>,
    write_to: Option<PathBuf>,
) -> Result<()> {
    let rule = risk_acceptance::Rule {
        package,
        version_range: version,
        justification,
        proposed_by,
        proposed_at: chrono::Utc::now(),
    };

    let yaml = risk_acceptance::emit_yaml(&rule);

    match write_to {
        Some(path) => {
            if let Some(parent) = path.parent() {
                if !parent.as_os_str().is_empty() {
                    std::fs::create_dir_all(parent)?;
                }
            }
            std::fs::write(&path, &yaml)?;
            eprintln!("wrote {} ({} bytes)", path.display(), yaml.len());
        }
        None => print!("{}", yaml),
    }

    Ok(())
}