Crates.io | random-trait |
lib.rs | random-trait |
version | 0.1.1 |
source | src |
created_at | 2019-08-26 20:32:03.972798 |
updated_at | 2019-08-26 21:33:39.099025 |
description | Rust library for a random trait meant to produce random generic types |
homepage | |
repository | |
max_upload_size | |
id | 159858 |
size | 14,892 |
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.
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.
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()
}