use std::process::Command;
use std::time::Instant;
const EXAMPLES: &[&str] = &[
"hello",
"std",
"variants",
"deep",
"dynamic",
"modify",
"tags", "alias",
"smart",
"overlay",
"inherit",
"stream",
"types",
"binary",
"strict",
"secure",
"schema",
"env", "errors",
"trace",
"source",
"style", "emit",
"rename",
"flatten",
"bridge",
"pipes",
"global",
"portable",
"mask",
"patch",
"suggest",
"schema_ext",
"untagged",
"borrow",
"transcode",
"comments",
"diagnostic",
"nostd",
"preserve",
"replay",
"registry",
"scientific",
"validation",
"anchor_shared",
"async_io",
"recursive",
"bench",
];
fn main() {
println!("\n \x1b[1mnoyalib examples\x1b[0m\n");
let start = Instant::now();
let mut passed = 0;
let mut failed = 0;
for name in EXAMPLES {
print!(" \x1b[90m{name:<28}\x1b[0m");
let result = Command::new("cargo")
.args(["run", "--example", name, "--quiet"])
.stdout(std::process::Stdio::null())
.stderr(std::process::Stdio::null())
.status();
match result {
Ok(status) if status.success() => {
println!("\x1b[32mdone\x1b[0m");
passed += 1;
}
_ => {
println!("\x1b[31mfail\x1b[0m");
failed += 1;
}
}
}
let elapsed = start.elapsed();
println!();
if failed == 0 {
println!(
" \x1b[1;32m{passed} examples passed\x1b[0m \x1b[90m({:.1}s)\x1b[0m\n",
elapsed.as_secs_f64()
);
} else {
println!(
" \x1b[1;31m{failed} failed\x1b[0m, {passed} passed \x1b[90m({:.1}s)\x1b[0m\n",
elapsed.as_secs_f64()
);
std::process::exit(1);
}
}