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

///|
/// `get_with` runs the loader only on a miss; a hit reuses the stored value.
///
///     moon run src/examples/02-loading
#coverage.skip
fn main raise {
  let loads : @ref.Ref[Int32] = @ref.Ref(0)
  let cache = @moonkart.lru_cache(cap=8L)
  let loader = fn(key : String) {
    loads.val = loads.val + 1
    key.length()
  }
  println(
    "first: \{cache.get_with("hello", @moonkart.infallible_loader(loader))}",
  )
  println(
    "second: \{cache.get_with("hello", @moonkart.infallible_loader(loader))}",
  )
  println("loader ran \{loads.val} time(s)")
  let stats = cache.stats()
  println(
    "loads: \{stats.load_success_count}, time: \{stats.total_load_time}ns",
  )
}