21 个版本 (7 个破坏性版本)
0.8.2 | 2023年3月7日 |
---|---|
0.7.0 | 2023年3月2日 |
#1162 在 Rust 模式
每月下载量 2,953
9KB
Enum-Derived
使用 Enum-Derived 的 Rand 宏生成枚举和结构的随机变体。所有字段都使用独立随机值填充。
需要为变体或字段应用自定义约束?使用 #[custom_rand(your_function)]
属性来覆盖默认行为或扩展对没有默认支持的类型的支持。
需要生成更多变体?使用 #[weight(VARIANT_WEIGHT)]
来改变分布。
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