use super::OsRngImpl;
use Error;
use rdrand::RdRand;
use rand_core::RngCore;
use std::fmt::{Debug, Formatter, Result as FmtResult};
#[derive(Clone)]
pub struct OsRng{
gen: RdRand
}
impl OsRngImpl for OsRng {
fn new() -> Result<OsRng, Error> {
let rng = RdRand::new()?;
Ok(OsRng{ gen: rng })
}
fn fill_chunk(&mut self, dest: &mut [u8]) -> Result<(), Error> {
self.gen.try_fill_bytes(dest)
}
fn method_str(&self) -> &'static str { "RDRAND" }
}
impl Debug for OsRng {
fn fmt(&self, f: &mut Formatter) -> FmtResult {
f.debug_struct("OsRng")
.finish()
}
}