robotrt-cli 0.1.0-beta.1

RobotRT modular robotics runtime and middleware components.
use introspection_core::read_middleware_load_report;

use crate::constants::DEFAULT_LOAD_REPORT_PATH;
use crate::demo::capture_demo_report;
use crate::helpers::{has_flag, parse_report_path, print_human};

pub fn middleware_load(args: &[String]) -> Result<(), String> {
    let report_path = parse_report_path(args, DEFAULT_LOAD_REPORT_PATH)?;
    let json = has_flag(args, "--json");
    let refresh_demo = has_flag(args, "--refresh-demo");

    if refresh_demo {
        capture_demo_report(&report_path).map_err(|err| {
            format!(
                "refresh demo report to {} failed: {err}",
                report_path.display()
            )
        })?;
    }

    let report = read_middleware_load_report(&report_path).map_err(|err| {
        format!(
            "read middleware load report from {} failed: {err}. Hint: run `cargo run -p local-loop` first, or pass --refresh-demo.",
            report_path.display()
        )
    })?;

    if json {
        let payload = serde_json::to_string_pretty(&report)
            .map_err(|err| format!("serialize report to json failed: {err}"))?;
        println!("{payload}");
    } else {
        print_human(&report, &report_path);
    }

    Ok(())
}

pub fn middleware_capture_demo(args: &[String]) -> Result<(), String> {
    let report_path = parse_report_path(args, DEFAULT_LOAD_REPORT_PATH)?;
    capture_demo_report(&report_path).map_err(|err| {
        format!(
            "capture demo report to {} failed: {err}",
            report_path.display()
        )
    })?;
    println!("captured demo middleware load: {}", report_path.display());
    Ok(())
}