为我自己的 rng 实现 RngCore,函数返回结果
implementing RngCore for my own rng, with function returning result
我有一个用例,我需要实现我自己的 rng,它可以传递给我需要 RngCore rng 的函数。
所以我需要为我的 rng 实现 RngCore 特性,即 esp32 设备上的 运行。
我目前拥有的是这样的:
impl RngCore for HRNG {
fn next_u32(&mut self) -> u32 {
let mut n : u32;
unsafe {
let n = esp_idf_sys::esp_random();
}
n
}
fn next_u64(&mut self) -> u64 {
let mut n : u32;
unsafe {
let n = esp_idf_sys::esp_random();
}
n
}
fn fill_bytes(&mut self, dest: &mut [u8]) {
unsafe { esp_idf_sys::esp_fill_random(dest.as_ptr() as *mut core::ffi::c_void, dest.len().try_into().unwrap()); }
}
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
//
}
}
我的问题是 try_fill_bytes
方法。
它 returns 一个结果,这可能是一个错误。
当前代码给了我这个问题:
the size for values of type `(dyn std::error::Error + 'static)` cannot be known at compilation time
但是我需要实现特征,所以我不知道该怎么做,因为需要函数签名?
我如何真正实现这个特性?
你需要rand::Error
, not (implicitly dyn
) std::error::Error
.
我有一个用例,我需要实现我自己的 rng,它可以传递给我需要 RngCore rng 的函数。 所以我需要为我的 rng 实现 RngCore 特性,即 esp32 设备上的 运行。 我目前拥有的是这样的:
impl RngCore for HRNG {
fn next_u32(&mut self) -> u32 {
let mut n : u32;
unsafe {
let n = esp_idf_sys::esp_random();
}
n
}
fn next_u64(&mut self) -> u64 {
let mut n : u32;
unsafe {
let n = esp_idf_sys::esp_random();
}
n
}
fn fill_bytes(&mut self, dest: &mut [u8]) {
unsafe { esp_idf_sys::esp_fill_random(dest.as_ptr() as *mut core::ffi::c_void, dest.len().try_into().unwrap()); }
}
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
//
}
}
我的问题是 try_fill_bytes
方法。
它 returns 一个结果,这可能是一个错误。
当前代码给了我这个问题:
the size for values of type `(dyn std::error::Error + 'static)` cannot be known at compilation time
但是我需要实现特征,所以我不知道该怎么做,因为需要函数签名?
我如何真正实现这个特性?
你需要rand::Error
, not (implicitly dyn
) std::error::Error
.