#random #enums #rand #struct #derive

enum-derived

Generate random instances of your enums and structs

21 releases (7 breaking)

0.8.2 Mar 7, 2023
0.7.0 Mar 2, 2023

#968 in Rust patterns

Download history 202/week @ 2023-12-09 14/week @ 2023-12-16 3/week @ 2023-12-23 21/week @ 2023-12-30 112/week @ 2024-01-06 163/week @ 2024-01-13 398/week @ 2024-01-20 367/week @ 2024-01-27 354/week @ 2024-02-03 185/week @ 2024-02-10 441/week @ 2024-02-17 432/week @ 2024-02-24 263/week @ 2024-03-02 106/week @ 2024-03-09 245/week @ 2024-03-16 388/week @ 2024-03-23

1,150 downloads per month

MIT license

9KB

Enum-Derived

Use Enum-Derived's Rand macro to generate random variants of your enums and structs. All fields are populated with independent random values.

Need custom constraints applied to a variant or field? Use the #[custom_rand(your_function)] attribute to override the default behavior or extend support to types without default support.

Need some variants to be generated more ofter? Use the #[weight(VARIANT_WEIGHT)] to change the distribution.

crates.io Build

Rand

Rand allows for a random variant of an enum, or struct, to be generated.

The [rand] crates rand::random method is used for the default implementation of [Rand]. Unsupported variants can us the #[custom_rand(your_function)] to extend the functionality.

use enum_derived::Rand;

#[derive(Rand)]
struct Weather {
    wind_speed: u8,
    #[custom_rand(rand_temp)]
    temperature: f32,
    cloudy: bool
}

#[derive(Rand)]
enum TravelLog {
    Airplane {
        weather: Weather,
        altitude: u16
    },
    Boat(
        Weather,
        #[custom_rand()]
        u32,
    ),
    #[custom_rand(always_has_sunroof)]
    Car {
        has_sunroof: bool,
    },
    #[weight(3)]
    SpaceShip,
}

fn main() {
    let travel_log = TravelLog::rand();
}

fn always_has_sunroof() -> TravelLog {
    TravelLog::Car { has_sunroof: true }
}

fn rand_boat_speed() -> u32 {
    thread_rng().gen_range(5..50)
}

fn rand_temp() -> f32 {
   thread_rng().gen_range(-20.0..120.0)
}

use rand::{thread_rng, Rng};

Dependencies

~1.5MB
~38K SLoC