robotrt-cli 0.1.0-beta.1

RobotRT modular robotics runtime and middleware components.
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"))
        }
    }
}