use osom_lib_reprc::traits::ReprC;
pub trait EntropyConcreteGenerator<TGenerator: EntropyGenerator>: Sized + ReprC {
fn generate(generator: &mut TGenerator) -> Result<Self, TGenerator::Error>;
}
pub trait EntropyGenerator: Sized + ReprC + Clone {
type Error: ReprC;
unsafe fn fill_raw(&mut self, buffer_ptr: *mut u8, buffer_len: usize) -> Result<(), Self::Error>;
#[inline(always)]
fn fill(&mut self, buffer: &mut [u8]) -> Result<(), Self::Error> {
unsafe { self.fill_raw(buffer.as_mut_ptr(), buffer.len()) }
}
#[inline(always)]
fn generate<T>(&mut self) -> Result<T, Self::Error>
where
T: EntropyConcreteGenerator<Self>,
{
T::generate(self)
}
}