///|
/// Analyze several independently produced API errors without retaining their
/// original payloads in the aggregate report.
fn main {
  let documents = [
    "{\"title\":\"Not Found\",\"status\":404,\"request_id\":\"req-1\"}", "{\"type\":\"https://iana.org/assignments/http-problem-types#date\",\"title\":\"Date Not Acceptable\",\"status\":400}",
    "{\"type\":\"https://example.com/problems/quota\",\"title\":\"Quota Exceeded\",\"status\":429,\"retry_after\":30}",
    "{\"title\":12,\"status\":500,\"debug\":\"stack trace\"}",
  ]
  let report = @problem.analyze_problem_batch(documents)
  println(report.summary_json())
  println("decision: " + report.decision().name())
  println("quality score: \{report.quality_score()}")
  println("parsed documents: \{report.parsed_count()}")
  println("parse failures: \{report.parse_failure_count()}")
  println("non-fatal diagnostics: \{report.diagnostic_count()}")
  println("semantic issues: \{report.semantic_issue_count()}")
  println("audit issues: \{report.audit_issue_count()}")
  println("registered types: \{report.registered_type_count()}")
  println("unregistered types: \{report.unregistered_type_count()}")
  println("extension names:")
  for frequency in report.extension_frequencies() {
    println("  \{frequency.name()}: \{frequency.count()}")
  }
  println("findings:")
  for finding in report.findings() {
    println(
      "  document \{finding.document_index()}: \{finding.kind().name()} — \{finding.context()}",
    )
  }
}