sheeter-engine 0.6.0

A CLI tool for converting data files between formats. v0.1.0 supports CSV <-> JSON.
Documentation
use assert_cmd::Command;
use std::fs;
use tempfile::tempdir;

fn run(from: &str, to: &str, input: &str, in_ext: &str, out_ext: &str) -> Result<String, String> {
    let dir = tempdir().unwrap();
    let inp = dir.path().join(format!("in.{in_ext}"));
    let out = dir.path().join(format!("out.{out_ext}"));
    fs::write(&inp, input).unwrap();
    let result = Command::cargo_bin("sheeter")
        .unwrap()
        .args([
            "convert",
            "--from",
            from,
            "--to",
            to,
            inp.to_str().unwrap(),
            out.to_str().unwrap(),
        ])
        .output()
        .unwrap();
    if !result.status.success() {
        return Err(String::from_utf8_lossy(&result.stderr).to_string());
    }
    Ok(fs::read_to_string(out).unwrap())
}

#[test]
fn csv_to_json_cli() {
    let dir = tempdir().unwrap();
    let input = dir.path().join("input.csv");
    let output = dir.path().join("output.json");
    fs::write(&input, "name,age\nAlice,30").unwrap();
    Command::cargo_bin("sheeter")
        .unwrap()
        .args([
            "convert",
            "--from",
            "csv",
            "--to",
            "json",
            input.to_str().unwrap(),
            output.to_str().unwrap(),
        ])
        .assert()
        .success();
    let json = fs::read_to_string(output).unwrap();
    assert_eq!(json, r#"[{"name":"Alice","age":"30"}]"#);
}

#[test]
fn json_to_csv_cli() {
    let dir = tempdir().unwrap();
    let input = dir.path().join("input.json");
    let output = dir.path().join("output.csv");
    fs::write(&input, r#"[{"name":"Alice","age":"30"}]"#).unwrap();
    Command::cargo_bin("sheeter")
        .unwrap()
        .args([
            "convert",
            "--from",
            "json",
            "--to",
            "csv",
            input.to_str().unwrap(),
            output.to_str().unwrap(),
        ])
        .assert()
        .success();
    let csv = fs::read_to_string(output).unwrap();
    assert_eq!(csv, "name,age\nAlice,30\n");
}