provisioning/schemas/platform/common/helpers_test2.ncl

35 lines
1.1 KiB
Text
Raw Normal View History

# Test: Non-recursive merge (single level only)
{
merge_shallow = fun base override =>
if (std.typeof base) == "record" && (std.typeof override) == "record" then
let base_fields = std.record.fields base in
let override_fields = std.record.fields override in
# Pass 1: iterate base fields
base_fields
|> std.array.fold_left
(fun acc key =>
let base_value = std.record.get key base in
if std.record.has_field key override then
let override_value = std.record.get key override in
acc |> std.record.insert key override_value
else
acc |> std.record.insert key base_value
)
{}
# Pass 2: add override-only fields
|> (fun merged =>
override_fields
|> std.array.fold_left
(fun acc key =>
if !(std.record.has_field key base) then
acc |> std.record.insert key (std.record.get key override)
else
acc
)
merged
)
else
if (std.typeof override) == "null" then base else override,
}