harmony-jolt 0.7.0

JSON to JSON transformation library using the JOLT spec
Documentation
use std::fs::File;
use serde_json::Value;
use serde::Deserialize;
use harmony_jolt::TransformSpec;

mod java;

#[derive(Debug, Deserialize)]
struct TestData {
    input: Value,
    spec: TransformSpec,
    expected: Value,
}

#[test]
fn test_all() {
    let tests = [
        "simple",
        "shift_and_default",
        "remove",
        "shift_wildcards",
        "simple_wildcards",
        "shift_with_or_condition",
        "variables",
        "from_benchmark",
        "nested_variables",
        "modifier_concat_names",
    ];
    for name in tests {
        do_test(name);
    }
}

fn do_test(name: &str) {
    //given
    let file = File::open(format!(
        "{}/tests/data/{}.json",
        env!("CARGO_MANIFEST_DIR"),
        name
    ))
    .unwrap_or_else(|_| panic!("existing file for test `{}`", name));
    let TestData {
        input,
        spec,
        expected,
    } = serde_json::from_reader::<_, TestData>(file)
        .unwrap_or_else(|err| panic!("unable to parse file for test `{}`: {:?}", name, err));

    //when
    let result = harmony_jolt::transform(input, &spec).unwrap();

    if result != expected {
        panic!(
            "failed assertion for test `{}`\nexpected:{}\ngot:{}",
            name,
            serde_json::to_string_pretty(&expected).unwrap(),
            serde_json::to_string_pretty(&result).unwrap()
        )
    }
}