Crate rand_derive [] [src]

Implementation of derive(Rand!) for macro_attr!{}.

This crate defines a macro Rand!{} that can be used through macro_attr!{} to derive an implementation of the Rand trait (crate rand version 0.3.x).

Using this macro also depends on crates parse_macros and parse_generics_shim, which must be included in the crate that uses them.

Example

extern crate rand;

#[macro_use] extern crate parse_macros;
#[macro_use] extern crate parse_generics_shim;
#[macro_use] extern crate macro_attr;

#[macro_use] extern crate rand_derive;

macro_attr! {
    #[derive(Rand!, Debug)]
    enum TestEnum {
        A,
        B,
        C,
    }
}

macro_attr! {
    #[derive(Rand!, Debug)]
    struct Point<T> {
        x: T,
        y: T,
    }
}

fn main() {
    let t: TestEnum = rand::random();
    let p: Point<f32> = rand::random();
}

Known Limitations

If the struct or enum is too complex, the compiler may run up against the recursion limit when compiling your crate. This can be adjusted with an attribute like #![recursion_limit="128"].

  • Does not allow explicit discriminants on unitary enum variants
  • Does not yet allow customizing which type parameters get the T: Rand bound applied. Right now they all get it.

Macros

Rand

Implementation of derive(Rand!) for macro_attr!{}.