xbp 10.30.1

XBP is a zero-config build pack that can also interact with proxies, kafka, sockets, synthetic monitors.
Documentation
use crate::utils::{fix_cursor_process_monitor_json, fix_cursor_process_monitor_json_file};
use colored::Colorize;
use std::fs;
use std::path::PathBuf;

pub fn run_fix_process_monitor_json(
    path: PathBuf,
    check: bool,
    stdout: bool,
) -> Result<(), String> {
    if check {
        let content = fs::read_to_string(&path)
            .map_err(|error| format!("Failed to read {}: {error}", path.display()))?;
        let (_, report) = fix_cursor_process_monitor_json(&content)?;

        if report.is_some() {
            println!("{} {} needs repair", "fix".yellow().bold(), path.display());
        } else {
            println!("{} {}", "ok".green().bold(), path.display());
        }

        return Ok(());
    }

    if stdout {
        let content = fs::read_to_string(&path)
            .map_err(|error| format!("Failed to read {}: {error}", path.display()))?;
        let (fixed, report) = fix_cursor_process_monitor_json(&content)?;
        print!("{fixed}");

        if let Some(report) = report {
            eprintln!(
                "{} repaired {} samples from {}",
                "fix".green().bold(),
                report.sample_count,
                path.display()
            );
        }

        return Ok(());
    }

    match fix_cursor_process_monitor_json_file(&path)? {
        Some(report) => {
            println!(
                "{} {} ({} samples)",
                "repaired".green().bold(),
                path.display(),
                report.sample_count
            );
        }
        None => {
            println!("{} {}", "ok".green().bold(), path.display());
        }
    }

    Ok(())
}