2 releases
Uses old Rust 2015
0.1.1 | Aug 26, 2019 |
---|---|
0.1.0 | Aug 26, 2019 |
#2403 in Algorithms
617 downloads per month
Used in 8 crates
(via random-fast-rng)
15KB
265 lines
random-trait
A Rust library random-trait that helps generating random values in an easy and convinient way while still being a very thin library without dependencies.
This crate is inspired by the rand crate, but with the purpose of providing a very thin library, and support old compilers.
Usage
Add this to your Cargo.toml
:
[dependencies]
random-trait = "0.1"
and for Rust Edition 2015 add this to your crate root:
extern crate random_trait;
use random_trait::{GenerateRand, Random};
In Rust Edition 2018 you can simply do:
use random_trait::{GenerateRand, Random};
After that you'll need to implement Random
for your source of randomness,
And optionally also add GenerateRand
implementations for your custom types.
Examples
use random_trait::{Random, GenerateRand};
#[derive(Default)]
struct MyRandomGenerator {
ctr: usize,
}
impl Random for MyRandomGenerator {
type Error = ();
fn try_fill_bytes(&mut self, buf: &mut [u8]) -> Result<(), Self::Error> {
for e in buf.iter_mut() {
*e = self.ctr as u8;
self.ctr += 1;
}
Ok(())
}
}
struct MyStuff {
a: u64,
b: char,
}
impl GenerateRand for MyStuff {
fn generate<R: Random + ?Sized>(rand: &mut R) -> Self {
MyStuff {a: rand.gen(), b: rand.gen() }
}
}
fn get_random_stuff() -> MyStuff {
let mut rand = MyRandomGenerator::default();
rand.gen()
}
fn get_random_u128() -> u128 {
let mut rand = MyRandomGenerator::default();
rand.gen()
}