@@ -2,28 +2,36 @@ use std::env;
22
33use cargo_hyperlight::cargo;
44
5+ mod perf;
6+
57const VERSION: &str = env!("CARGO_PKG_VERSION");
68const GIT_HASH: &str = env!("GIT_HASH");
79const GIT_DATE: &str = env!("GIT_DATE");
810
911fn main() {
10- if env::args().any(|arg| arg == "--version" || arg == "-V") {
11- println!("cargo-hyperlight {} ({} {})", VERSION, GIT_HASH, GIT_DATE);
12- return;
12+ // Skip binary name; when invoked as `cargo hyperlight`, cargo passes
13+ // "hyperlight" as argv[1] — skip that too.
14+ let mut args = env::args_os().skip(1).peekable();
15+ if args.peek().is_some_and(|a| a == "hyperlight") {
16+ args.next();
1317 }
1418
15- let args = env::args_os().enumerate().filter_map(|(i, arg)| {
16- // skip the binary name and the "hyperlight" subcommand if present
17- if i == 0 || (i == 1 && arg == "hyperlight") {
18- None
19- } else {
20- Some(arg)
19+ match args.peek().map(|a| a.to_os_string()) {
20+ Some(a) if a == "--version" || a == "-V" => {
21+ println!("cargo-hyperlight {} ({} {})", VERSION, GIT_HASH, GIT_DATE);
2122 }
22- });
23-
24- cargo()
25- .expect("Failed to create cargo command")
26- .args(args)
27- .status()
28- .expect("Failed to execute cargo")
23+ Some(a) if a == "perf" => {
24+ if let Err(e) = perf::run(args) {
25+ eprintln!("{e:?}");
26+ std::process::exit(1);
27+ }
28+ }
29+ _ => {
30+ cargo()
31+ .expect("Failed to create cargo command")
32+ .args(args)
33+ .status()
34+ .expect("Failed to execute cargo");
35+ }
36+ }
2937}
0 commit comments