rulemorph 0.3.3

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
#[test]
fn test_v2_lookup_first_transform() {
    let yaml = r#"
version: 2
input:
  format: json
mappings:
  - target: dept_name
    expr:
      - lookup_first:
        - "@context.departments"
        - id
        - "@input.dept_id"
        - name
"#;
    let rule = parse_rule_file(yaml).unwrap();
    let input = r#"[{"dept_id": 2}]"#;
    let context = serde_json::json!({
        "departments": [
            {"id": 1, "name": "Engineering"},
            {"id": 2, "name": "Marketing"},
            {"id": 3, "name": "Sales"}
        ]
    });
    let result = transform(&rule, input, Some(&context)).unwrap();
    assert_eq!(result, serde_json::json!([{"dept_name": "Marketing"}]));
}

#[test]
fn test_v2_lookup_first_with_pipe_value_transform() {
    let yaml = r#"
version: 2
input:
  format: json
mappings:
  - target: dept_name
    expr:
      - "@context.departments"
      - lookup_first:
        - id
        - "@input.dept_id"
        - name
"#;
    let rule = parse_rule_file(yaml).unwrap();
    let input = r#"[{"dept_id": 2}]"#;
    let context = serde_json::json!({
        "departments": [
            {"id": 1, "name": "Engineering"},
            {"id": 2, "name": "Marketing"},
            {"id": 3, "name": "Sales"}
        ]
    });
    let result = transform(&rule, input, Some(&context)).unwrap();
    assert_eq!(result, serde_json::json!([{"dept_name": "Marketing"}]));
}