///|
fn main {
  let records = [
    @journal.JournalRecord::new(Begin, 1U, 101U),
    @journal.JournalRecord::new(
      Put,
      2U,
      101U,
      payload=@journal.encode_put_payload(b"account/alice", b"100"),
    ),
    @journal.JournalRecord::new(Commit, 3U, 101U),
    @journal.JournalRecord::new(Begin, 4U, 102U),
    @journal.JournalRecord::new(
      Delete,
      5U,
      102U,
      payload=@journal.encode_delete_payload(b"account/old"),
    ),
    @journal.JournalRecord::new(Abort, 6U, 102U),
  ]
  let stream = @journal.encode_records(records)
  let scan = @journal.scan_journal(stream)
  let recovery = @journal.build_recovery_plan(scan.records)
  println("MoonJournalKit deterministic recovery demo")
  println("scan=" + scan.to_json())
  println("recovery=" + recovery.to_json())
  println("crash_sweep=" + @journal.sweep_crash_cuts(records).to_json())
  println(
    "corruption_sweep=" +
    @journal.sweep_single_bit_corruption(records).to_json(),
  )
}