///|
/// A clock and a random source stand in for the host's: a server would pass
/// its real time and its system randomness.
fn main {
  let now = Ref(1_761_350_400_000_000_000L)
  let seed = Ref(7)
  let stream = Bytes::makei(256, i => {
    seed.val = (seed.val * 1103515245 + 12345) & 0x7FFFFFFF
    (seed.val >> (i % 3 * 8)).to_byte()
  })
  let gen = @moonuuid.Generator::new(
    clock=() => {
      now.val += 400_000L
      now.val
    },
    random=@moonseed.Replay::new(stream),
  )
  try {
    println("v7, in the order made:")
    for _ in 0..<4 {
      println("  \{gen.v7()}")
    }
    let name = @moonuuid.v5(
      @moonuuid.namespace_url, "https://moonbitstack.github.io/moonuuid/",
    )
    println("v5 of a URL: \{name}, version \{name.version().unwrap()}")
    let id = @moonuuid.parse("{C232AB00-9414-11EC-B3C8-9F6BDECED846}")
    println("parsed: \{id}  time \{id.time()}  node \{id.node()}")
    println("as JSON: \{Json(id).stringify()}")
  } catch {
    e => println("refused: \{e}")
  }
}