kxfides 0.1.0

CLI for signing & verifying media with KX-Fides.
// cli/src/cmd_manifest_show.rs

use anyhow::{Context, Result};
use owo_colors::OwoColorize;
use std::fs;
use std::path::Path;

use kx_fides_core::manifest::read_manifest;

use super::ManifestShowArgs;

pub fn run(args: ManifestShowArgs) -> Result<()> {
    let path = args.manifest;

    if !Path::new(&path).exists() {
        anyhow::bail!("manifest file not found: {}", path.display());
    }

    let m = read_manifest(&path)
        .with_context(|| format!("failed to read manifest {}", path.display()))?;

    // Pretty-print raw JSON for transparency
    let raw = fs::read(&path)?;
    let pretty: serde_json::Value = serde_json::from_slice(&raw)?;
    println!("{}", serde_json::to_string_pretty(&pretty)?);

    println!(
        "\n{} {}",
        "✓ manifest is valid →".green().bold(),
        path.display()
    );
    println!("{} {}", "media:".cyan(), m.media.name);
    println!("{} {}", "size:".cyan(), m.media.size);
    println!("{} {}", "hash:".cyan(), m.media.hash_value);
    println!("{} {}", "alg:".cyan(), m.media.hash_alg);

    Ok(())
}