// examples/config_diff_ops — runnable demonstration of the
// `src/infra_config` + `src/infra_diff` directions as a realistic ops
// workflow: parse a service TOML/INI config, diff two config revisions into
// unified hunks, apply and revert the patch, three-way merge concurrent
// edits with conflict rendering, and gate a rollout on semver.
//
// Run with:
// moon run examples/config_diff_ops
///|
fn main {
println("=== 1. parse service config (TOML) ===")
let toml_src = "name = \"router\"\nport = 8080\ntimeout = 2.5\ndebug = false\n"
match @config.toml_parse(toml_src) {
Some(table) => {
println("keys: \{table.length()}")
match @config.toml_get(table, "port") {
Some(TomlInt(p)) => println("port: \{p}")
_ => println("port missing")
}
match @config.toml_get(table, "timeout") {
Some(TomlFloat(t)) => println("timeout: \{t}s")
_ => println("timeout missing")
}
}
None => println("toml parse failed")
}
let ini_src = "[server]\nhost = 0.0.0.0\nport = 8080\n[log]\nlevel = info\n"
match @config.ini_parse(ini_src) {
Some(sections) => {
let level = @config.ini_get(sections, "log", "level").unwrap_or("?")
println("ini [log] level: \{level}")
}
None => println("ini parse failed")
}
println("")
println("=== 2. diff two config revisions -> unified patch ===")
let v1 = ["name = router", "port = 8080", "timeout = 2.5", "debug = false"]
let v2 = ["name = router", "port = 9090", "timeout = 2.5", "retries = 3"]
let ops = @diff.diff_lines(v1, v2)
println("edit distance: \{@diff.edit_distance(ops)}")
println(@diff.format_unified(v1, v2, context=1))
println("=== 3. patch apply + revert round-trip ===")
match @diff.patch_apply(v1, ops) {
Some(patched) => {
println("apply ok : patched == v2 -> \{patched == v2}")
match @diff.patch_revert(patched, ops) {
Some(reverted) =>
println("revert ok : reverted == v1 -> \{reverted == v1}")
None => println("revert failed")
}
}
None => println("apply failed")
}
let hunks = @diff.hunks_of(ops, context=1)
match @diff.apply_unified(v1, hunks) {
Some(via_hunks) => println("hunk apply: == v2 -> \{via_hunks == v2}")
None => println("hunk apply failed")
}
println("")
println("=== 4. three-way merge of concurrent edits ===")
let base = [
"# service", "port = 8080", "workers = 4", "level = info", "retries = 1",
]
let ours = [
"# service", "port = 9090", "workers = 4", "level = info", "retries = 1",
]
let theirs = [
"# service", "port = 8080", "workers = 4", "level = debug", "retries = 1",
]
let merged = @diff.diff3_merge(base, ours, theirs)
let (lines, has_conflict) = @diff.render_merge(merged)
println("disjoint edits -> conflict = \{has_conflict}")
println("merged: [\{lines.join(", ")}]")
let theirs2 = [
"# service", "port = 7070", "workers = 4", "level = info", "retries = 1",
]
let conflicted = @diff.diff3_merge(base, ours, theirs2)
let (clines, has_conflict2) = @diff.render_merge(conflicted)
println("conflicting edit on same line -> conflict = \{has_conflict2}")
for l in clines {
println(" \{l}")
}
println("")
println("=== 5. semver rollout gate ===")
let cur = @diff.semver_parse("1.4.2")
let next = @diff.semver_parse("1.5.0-rc.1+build7")
match (cur, next) {
(Some(a), Some(b)) => {
println("current \{a} vs candidate \{b}")
println(
"upgrade allowed (candidate newer): \{@diff.semver_compare(a, b) < 0}",
)
}
_ => println("semver parse failed")
}
}