// Copyright 2026 Leo Cheng
// SPDX-License-Identifier: Apache-2.0

///|
/// A HOCON document with a reference, an optional reference and an include.
///
///     moon run src/examples/typesafe
#coverage.skip
fn main raise {
  let knobs = @hocon.Knobs::with_read(name => {
    if name == "base.conf" {
      Some("db {\n  host = localhost\n  port = 5432\n}\n")
    } else {
      None
    }
  })
  let text = "include \"base.conf\"\n" +
    "db.name = app\n" +
    "url = \"postgres://${db.host}:${db.port}/${db.name}\"\n" +
    "cache = ${?missing}\n" +
    "hosts = [a]\n" +
    "hosts = [b]\n" +
    "hosts += c\n"
  let doc = @hocon.parse(text[:], knobs~)
  println("url   -> \{doc.need_text("url")}")
  println("cache -> \{doc.has("cache")}")
  let names = []
  for host in doc.need("hosts").list() {
    names.push(host.text())
  }
  println("hosts -> \{names.join(", ")}")
}