///|
let global_registry : Map[Int, String] = Map([])

///|
let next_id : Ref[Int] = Ref(1)

///|
pub fn registry_retain(obj : String) -> Int {
  let id = next_id.val
  next_id.val += 1
  global_registry[id] = obj
  id
}

///|
pub fn registry_release(id : Int) -> Unit {
  global_registry.remove(id)
}

///|
pub fn registry_get(id : Int) -> String? {
  global_registry.get(id)
}

///|
pub fn moonbit_release_handle(id : Int) -> Unit {
  registry_release(id)
}