open-agent-profile 1.0.3

Rust support library for Open Agent Profile 1.0
Documentation
use std::{path::PathBuf, process::ExitCode};

use clap::Parser;
use open_agent_profile::validate_path;

#[derive(Parser)]
#[command(version, about = "Validate Open Agent Profile documents")]
struct Arguments {
    #[arg(long)]
    strict: bool,
    #[arg(long)]
    digest: bool,
    #[arg(required = true)]
    paths: Vec<PathBuf>,
}

fn main() -> ExitCode {
    let args = Arguments::parse();
    let mut failed = false;
    for path in args.paths {
        let report = validate_path(&path);
        for error in &report.errors {
            eprintln!("error: {}: {}", error.pointer, error.message);
        }
        for warning in &report.warnings {
            eprintln!("warn: {}: {}", warning.pointer, warning.message);
        }
        if !report.ok || (args.strict && !report.warnings.is_empty()) {
            failed = true;
        } else {
            println!("{}: valid {}", path.display(), report.kind);
        }
        if args.digest {
            if let Some(digests) = report.digests {
                println!("  profile {}\n  spec    {}", digests.profile, digests.spec);
            }
        }
    }
    if failed {
        ExitCode::FAILURE
    } else {
        ExitCode::SUCCESS
    }
}