mod commands;
mod constants;
mod demo;
mod helpers;
mod status_api;
mod usage;
use crate::helpers::is_help_token;
use crate::usage::print_usage;
fn main() {
if let Err(err) = run() {
eprintln!("error: {err}");
std::process::exit(1);
}
}
fn run() -> Result<(), String> {
let args: Vec<String> = std::env::args().skip(1).collect();
if args.is_empty() {
print_usage(None);
return Ok(());
}
if args.first().is_some_and(|arg| is_help_token(arg)) {
print_usage(None);
return Ok(());
}
if args.first().is_some_and(|arg| arg == "help") {
print_usage(args.get(1).map(String::as_str));
return Ok(());
}
if args.get(1).is_some_and(|arg| is_help_token(arg)) {
print_usage(args.first().map(String::as_str));
return Ok(());
}
match (
args.first().map(String::as_str),
args.get(1).map(String::as_str),
) {
(Some("middleware"), Some("load")) => commands::middleware_load(&args[2..]),
(Some("middleware"), Some("capture-demo")) => commands::middleware_capture_demo(&args[2..]),
(Some("runtime"), Some("load")) => commands::runtime_load(&args[2..]),
(Some("node"), Some("list")) => commands::resource_list("node", &args[2..]),
(Some("node"), Some("info")) => commands::node_info(&args[2..]),
(Some("topic"), Some("list")) => commands::resource_list("topic", &args[2..]),
(Some("topic"), Some("info")) => commands::topic_info(&args[2..]),
(Some("topic"), Some("hz")) => commands::topic_hz(&args[2..]),
(Some("topic"), Some("echo")) => commands::topic_echo(&args[2..]),
(Some("service"), Some("list")) => commands::resource_list("service", &args[2..]),
(Some("action"), Some("list")) => commands::resource_list("action", &args[2..]),
(Some("action"), Some("info")) => commands::action_info(&args[2..]),
(Some("action"), Some("watch")) => commands::action_watch(&args[2..]),
(Some("mission"), Some("list")) => commands::resource_list("mission", &args[2..]),
(Some("mission"), Some("watch")) => commands::mission_watch(&args[2..]),
(Some("plugin"), Some("list")) => commands::plugin_list(&args[2..]),
(Some("obs"), Some("export")) => commands::obs_export(&args[2..]),
(Some("orchestrate"), _) => commands::orchestrate_cmd(&args[1..]),
(Some("ops"), Some("snapshot")) => commands::ops_snapshot(&args[2..]),
(Some("ops"), Some("console")) => commands::ops_console(&args[2..]),
(Some("ops"), Some("diff")) => commands::ops_diff(&args[2..]),
(Some("ops"), Some("fleet")) => commands::ops_fleet(&args[2..]),
(Some("ops"), Some("profile")) => commands::ops_profile(&args[2..]),
(Some("ops"), Some("replay")) => commands::ops_replay(&args[2..]),
(Some("sdk"), Some("init")) => commands::sdk_init(&args[2..]),
(Some("sdk"), Some("migrate-batch")) => commands::sdk_migrate_batch(&args[2..]),
(Some("sdk"), Some("migrate-report")) => commands::sdk_migrate_report(&args[2..]),
(Some("sdk"), Some("retry-failed")) => commands::sdk_retry_failed(&args[2..]),
(Some("sdk"), Some("migrate")) => commands::sdk_migrate(&args[2..]),
(Some("sdk"), Some("rollback")) => commands::sdk_rollback(&args[2..]),
(Some("sdk"), Some("rollback-batch")) => commands::sdk_rollback_batch(&args[2..]),
(Some("status"), Some("serve")) => commands::status_serve(&args[2..]),
(Some("health"), _) => commands::health_cmd(&args[1..]),
(Some("graph"), _) => commands::graph_cmd(&args[1..]),
(Some("bag"), Some("record")) => commands::bag_record(&args[2..]),
(Some("bag"), Some("play")) => commands::bag_play(&args[2..]),
_ => {
print_usage(None);
Err(String::from("unsupported command"))
}
}
}