///|
/// In-memory service configuration: parse, query, replace and serialize.
fn main {
  try {
    let config = @config.parse(
      "service={name=\"demo\";port=9000;enabled=true;} peers=({host=\"localhost\";weight=1L;})",
    )
    let name = config.lookup("service.name").as_string()
    let port = config.lookup("service.port").as_int()
    let host = config.lookup("peers[0].host").as_string()
    println("Service: \{name}, port: \{port}, first peer: \{host}")
    let updated = config.replaced(
      @config.parse_path("service.port"),
      @config.Integer(8080),
    )
    let output = @config.stringify(updated)
    let reloaded = @config.parse(output)
    println("Updated port: \{reloaded.lookup("service.port").as_int()}")
    println(output)
  } catch {
    @config.ConfigError(d) => {
      println("\{d.code}: \{d.message}")
      panic()
    }
  }
}