///|
/// Native OS-backed random bytes.
#borrow(buf)
extern "C" fn os_random(buf : Bytes, len : Int) -> Int = "nanoid_os_random"

///|
fn get_random_bytes(size : Int) -> Result[Array[Int], NanoidError] {
  if size <= 0 {
    return Ok([])
  }
  let random_bytes = Bytes::new(size)
  if os_random(random_bytes, size) == 0 {
    Ok(bytes_to_int_array(random_bytes, size))
  } else {
    Err(RandomGenerationError("Failed to get random bytes from OS"))
  }
}