apicurio-cli 0.1.2

A powerful CLI tool for managing schema artifacts from Apicurio Registry with lockfile-based dependency management
use crate::{
    config::{load_global_config, load_repo_config},
    constants::{APICURIO_CONFIG, APICURIO_LOCK},
    lockfile::LockFile,
};
use anyhow::Result;
use std::path::PathBuf;

pub async fn run() -> Result<()> {
    let repo_cfg = load_repo_config(&PathBuf::from(APICURIO_CONFIG))?;
    let global_cfg = load_global_config()?;
    let regs = repo_cfg.merge_registries(global_cfg)?;

    println!("Registries:");
    if regs.is_empty() {
        println!(" - No registries found.");
    } else {
        for r in regs {
            println!(" - {}{}", r.name, r.url);
        }
    }

    let lock = LockFile::load(&PathBuf::from(APICURIO_LOCK)).ok();
    println!("\nDependencies:");
    if repo_cfg.dependencies.is_empty() {
        println!(" - No dependencies found.");
    } else {
        for dep in repo_cfg.dependencies {
            if let Some(lf) = &lock {
                if let Some(ld) = lf.locked_dependencies.iter().find(|d| d.name == dep.name) {
                    println!(
                        " - {}: spec={} locked={}",
                        dep.name, dep.version, ld.resolved_version
                    );
                    continue;
                }
            }
            println!(" - {}: spec={}", dep.name, dep.version);
        }
    }

    Ok(())
}