use anyhow::{Context, Result};
use test_spin::{ExternalManifest, InspectionOptions};
fn main() {
if let Err(error) = run() {
eprintln!("\n!! record-test failed: {error:#}");
std::process::exit(1);
}
}
fn run() -> Result<()> {
let mut verbose = false;
let positional = std::env::args()
.skip(1)
.filter(|arg| {
if arg == "--verbose" || arg == "-v" {
verbose = true;
false
} else {
true
}
})
.collect::<Vec<_>>();
let mut args = positional.into_iter();
let png_path = args
.next()
.context("usage: record-test [--verbose] <record.png> [bundle.json] [manifest]")?;
let bundle_path = args.next();
let manifest_path = args.next();
let png = std::fs::read(&png_path).with_context(|| format!("failed to read {png_path}"))?;
let bundle_metadata = bundle_path
.as_deref()
.map(test_spin::load_bundle_metadata)
.transpose()?;
let manifest_bytes = manifest_path
.as_deref()
.map(|path| std::fs::read(path).with_context(|| format!("failed to read manifest {path}")))
.transpose()?;
let mut options = InspectionOptions::verbose_defaults();
options.png_name = Some(&png_path);
options.bundle_metadata = bundle_metadata.as_ref();
options.verbose_payload_entries = verbose;
if let (Some(path), Some(bytes)) = (manifest_path.as_deref(), manifest_bytes.as_deref()) {
options.manifest = Some(ExternalManifest { name: path, bytes });
}
let report = test_spin::inspect_record_png(&png, &options)?;
print!("{report}");
Ok(())
}