warble-eval-compare 0.15.1

Warble eval comparator: compare a result-set table against a golden expectation (scalar/set/ordered match, with tolerance).
Documentation
use std::io::{self, Read, Write};
use std::process::ExitCode;

use warble_eval_compare::{compare, CompareRequest, CompareResult};

fn run() -> Result<CompareResult, String> {
    let mut input = String::new();
    io::stdin()
        .read_to_string(&mut input)
        .map_err(|e| format!("failed to read stdin: {e}"))?;
    let request: CompareRequest =
        serde_json::from_str(&input).map_err(|e| format!("invalid input JSON: {e}"))?;
    Ok(compare(&request))
}

fn main() -> ExitCode {
    match run() {
        Ok(result) => {
            let output = serde_json::to_string(&result).expect("result always serializes");
            println!("{output}");
            ExitCode::SUCCESS
        }
        Err(err) => {
            let result = CompareResult {
                pass: false,
                reason: err,
            };
            let output = serde_json::to_string(&result).expect("result always serializes");
            let _ = writeln!(io::stderr(), "{output}");
            ExitCode::FAILURE
        }
    }
}