///|
fn main raise {
let rule : Json = {
"if": [
{ "var": "enabled" },
{
"map": [
{ "var": "departments" },
{
"reduce": [
{ "var": "scores" },
{ "+": [{ "var": "current" }, { "var": "accumulator" }] },
{ "var": "bonus" },
],
},
],
},
{ "var": [{ "cat": ["fallback.", { "var": "selected" }] }] },
],
}
let report = @rule_analysis.check(rule)
assert_eq(report.root_paths(), ["enabled", "departments", "selected"])
assert_eq(report.scopes.length(), 3)
assert_eq(report.scopes[2].parent_id, Some(1))
assert_true(report.has_dynamic_paths())
let dependencies = report.dependencies.map(dependency => {
let (kind, path) = match dependency.kind {
@rule_analysis.StaticPath(path) => ("static", path)
@rule_analysis.WholeScope => ("whole_scope", "")
@rule_analysis.DynamicPath => ("dynamic", "")
}
(
{
"scope_id": dependency.scope_id,
"kind": kind,
"data_path": path,
"rule_pointer": dependency.pointer,
} : Json)
})
let result : Json = {
"valid_syntax": report.is_valid(),
"root_static_paths": report.root_paths().to_json(),
"has_dynamic_paths": report.has_dynamic_paths(),
"scope_count": report.scopes.length(),
"dependencies": dependencies.to_json(),
}
println(result.stringify())
}