#random #枚举 #rand #struct #derive

enum-derived

通过 Enum-Derived 的 Rand 宏生成枚举和结构的随机实例

21 个版本 (7 个破坏性版本)

0.8.2 2023年3月7日
0.7.0 2023年3月2日

#1162Rust 模式

Download history 130/week @ 2024-03-13 284/week @ 2024-03-20 340/week @ 2024-03-27 155/week @ 2024-04-03 182/week @ 2024-04-10 365/week @ 2024-04-17 487/week @ 2024-04-24 476/week @ 2024-05-01 528/week @ 2024-05-08 278/week @ 2024-05-15 294/week @ 2024-05-22 437/week @ 2024-05-29 741/week @ 2024-06-05 528/week @ 2024-06-12 801/week @ 2024-06-19 736/week @ 2024-06-26

每月下载量 2,953

MIT 许可证

9KB

Enum-Derived

使用 Enum-Derived 的 Rand 宏生成枚举和结构的随机变体。所有字段都使用独立随机值填充。

需要为变体或字段应用自定义约束?使用 #[custom_rand(your_function)] 属性来覆盖默认行为或扩展对没有默认支持的类型的支持。

需要生成更多变体?使用 #[weight(VARIANT_WEIGHT)] 来改变分布。

crates.io Build

Rand

Rand 允许生成枚举或结构的随机变体。

使用 [rand] crate 的 rand::random 方法作为 [Rand] 的默认实现。不支持的变体可以使用 #[custom_rand(your_function)] 扩展功能。

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};

依赖项

~1.5MB
~39K SLoC