use std::path::PathBuf;
use clap::Args as ClapArgs;
use rite_runtime::{VerifyError, verify_step_fact_transcript};
#[derive(ClapArgs, Debug)]
pub struct Args {
pub file: PathBuf,
}
pub fn run(args: Args) {
let (transcript_path, source_dir) = if args.file.is_dir() {
let candidate = args.file.join("transcript.jsonl");
(candidate, Some(args.file))
} else {
(args.file, None)
};
match verify_step_fact_transcript(&transcript_path) {
Ok(verified) => {
println!("Transcript verified.");
println!(" Facts: {}", verified.fact_count);
println!(" Fingerprint: {}", verified.fingerprint);
if !verified.terminated {
eprintln!(
" Warning: transcript is truncated, no CeremonyCompleted or \
CeremonyFailed fact at the end."
);
}
std::process::exit(0);
}
Err(VerifyError::Io(e)) => {
match (&source_dir, e.kind()) {
(Some(dir), std::io::ErrorKind::NotFound) => {
eprintln!("No transcript found in folder: {}", dir.display());
eprintln!("Expected: {}", transcript_path.display());
}
_ => {
eprintln!("Failed to read transcript: {e}");
}
}
std::process::exit(1);
}
Err(err) => {
eprintln!("Verification failed: {err}");
std::process::exit(1);
}
}
}