#[derive(Rand)] functionality for the rand::Rand trait.
Add this to your Cargo.toml:
[dependencies] rand = "0.3" rand_macros = "0.2"
and this to your crate root:
extern crate rand; #[macro_use] extern crate rand_macros;
#[derive(Rand)] can be used on any struct or enum where all fields/variants implement rand::Rand.
#[derive(Debug, Rand)] struct Foo { x: u16, y: Option<f64>, } #[derive(Debug, Rand)] enum Bar { X{x: u8, y: isize}, Y([bool; 4]), Z, }
Now you can call the Rng::gen() function on your custom types.
use rand::Rng; let mut rng = rand::thread_rng(); println!("{:?}", rng.gen::<Foo>()); println!("{:?}", rng.gen::<Bar>());