我有一个用例,需要实现我自己的rng,该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
方法。它返回一个可能是错误的结果。现在代码给了我这个问题:
the size for values of type `(dyn std::error::Error + 'static)` cannot be known at compilation time
但是我需要实现这个特性,所以我不确定该怎么办,因为函数签名是必需的?
我该如何实现这一特点?
您需要rand::Error
,而不是(隐含地dyn
(std::error::Error
。