rulemorph 0.3.4

YAML-based declarative data transformation engine for CSV/JSON to JSON
Documentation
#[test]
fn trace_records_source_default_and_output_write_with_raw_values() {
    let yaml = r#"
version: 2
input:
  format: json
record_when:
  eq: ["@input.active", true]
mappings:
  - target: "profile.name"
    source: "name"
  - target: "profile.nickname"
    source: "nickname"
    default: "anonymous"
  - target: "profile.skip"
    source: "skip"
    when:
      eq: ["@input.include_skip", true]
"#;
    let rule = parse_rule_file(yaml).expect("parse rule");
    let traced = transform_input_with_trace(
        &rule,
        InputData::Text(r#"[{"active":true,"name":"alice"}]"#),
        None,
        &TransformTraceOptions::raw(),
    )
    .expect("traced transform");

    let events = &traced.trace.records[0].events;
    let kinds = events
        .iter()
        .map(|event| serde_json::to_value(&event.kind).unwrap())
        .collect::<Vec<_>>();
    assert!(kinds.contains(&json!("record_when_start")));
    assert!(kinds.contains(&json!("record_when_end")));
    assert!(kinds.contains(&json!("source_read")));
    assert!(kinds.contains(&json!("default_applied")));
    assert!(kinds.contains(&json!("mapping_when_start")));
    assert!(kinds.contains(&json!("mapping_when_end")));
    assert!(kinds.contains(&json!("mapping_decision")));
    assert!(kinds.contains(&json!("output_write")));

    let raw_values = serde_json::to_string(&traced.trace).expect("serialize trace");
    assert!(raw_values.contains("alice"));
    assert!(raw_values.contains("anonymous"));
}