use alloc::boxed::Box;
use core::mem::MaybeUninit;
use wasefire_applet_api::rng as api;
use crate::{Error, convert_unit};
pub fn bytes(len: usize) -> Result<Box<[u8]>, Error> {
let mut buf = Box::new_uninit_slice(len);
fill_uninit_bytes(&mut buf)?;
Ok(unsafe { buf.assume_init() })
}
pub fn bytes_array<const N: usize>() -> Result<[u8; N], Error> {
let mut buf = [MaybeUninit::uninit(); N];
fill_uninit_bytes(&mut buf)?;
Ok(unsafe { MaybeUninit::array_assume_init(buf) })
}
pub fn fill_bytes(buf: &mut [u8]) -> Result<(), Error> {
let buf = unsafe {
core::slice::from_raw_parts_mut(buf.as_mut_ptr() as *mut MaybeUninit<u8>, buf.len())
};
fill_uninit_bytes(buf)
}
fn fill_uninit_bytes(buf: &mut [MaybeUninit<u8>]) -> Result<(), Error> {
let params = api::fill_bytes::Params { ptr: buf.as_mut_ptr() as *mut u8, len: buf.len() };
convert_unit(unsafe { api::fill_bytes(params) })
}