///|
#borrow(buffer)
extern "c" fn object_id_secure_random_ffi(buffer : Bytes) -> Int = "moonbit_bson_secure_random"

///|
fn object_id_secure_random(count : Int) -> Bytes raise BsonError {
  match secure_entropy_from_provider(count) {
    Some(bytes) => return bytes
    None => ()
  }
  let buffer = Bytes::make(count, 0)
  if object_id_secure_random_ffi(buffer) != 0 {
    raise bson_error(
      UnsupportedEntropy,
      -1,
      "$.\u{24}oid",
      "native operating system secure entropy is unavailable",
    )
  }
  buffer
}