#random #macro-derive #rand #generate #macro #derive

rand_derive2

使用rand crate生成可定制的随机类型

21个版本

0.1.21 2023年6月18日
0.1.18 2022年10月18日
0.1.17 2021年12月13日
0.1.16 2021年1月6日
0.1.15 2020年11月27日

#153 in 进程宏

Download history 224/week @ 2024-04-21 166/week @ 2024-04-28 167/week @ 2024-05-05 170/week @ 2024-05-12 302/week @ 2024-05-19 216/week @ 2024-05-26 144/week @ 2024-06-02 97/week @ 2024-06-09 154/week @ 2024-06-16 195/week @ 2024-06-23 80/week @ 2024-06-30 206/week @ 2024-07-07 117/week @ 2024-07-14 130/week @ 2024-07-21 228/week @ 2024-07-28 261/week @ 2024-08-04

746 每月下载量
10 个crate中使用 (9 直接)

MIT/Apache

18KB
381

Rand derive 2

Latest Version Build Status

使用rand crate生成随机类型的宏。它会为给定类型实现rand::distributions::Standard

用法

查看示例crate或按照以下说明操作。

  1. 将此添加到您的Cargo.toml文件中
[dependencies]
rand_derive2 = "0.1"
rand = "0.8"
  1. 在文件中导入宏,位置在您的类型附近
use rand_derive2::RandGen;

或者,全局导入宏

#[macro_use]
extern crate rand_derive2;
  1. 为您的类型添加RandGen derive宏
#[derive(RandGen)]
struct MyStruct {}
  1. 生成您的结构体
fn generate_my_struct() -> MyStruct { 
    rand::random()
}

// Or like this
fn generate_my_struct_direct() -> MyStruct { 
    MyStruct::generate_random()
}

自定义

注意:示例crate中包含了所有可自定义的内容

选项

要确保选项永远不会生成None,在属性顶部添加rand_derive(none)属性。要确保选项永远不会生成Some,在属性顶部添加rand_derive(some)属性。

跳过枚举变体

如果某个变体不应该生成,在变体上添加rand_derive(skip)属性。

自定义值

如果您想为某个属性设置自定义值,添加rand_derive(custom)属性。将创建一个名为TestDataProviderFor$TYPE$的trait。此trait将要求用户提供值。

无rand

属性恐慌实现,使得类型无法随机生成。为此添加 rand_derive(panic) 属性。

默认值

rand_derive(default) 放置在字段上方,使其生成默认值。注意:对于一个 Vec,这将创建一个包含默认值的元素个数为 1 的 vec。

可以放置在包含 Vec 的类型上方。它将生成一个空 vec。

固定值

rand_derive(fixed = "MY_VALUE") 放置在字段上方,使其生成固定值。

工作原理

结构体

对所有字段调用 rng.gen()

枚举

它将生成一个随机变体。

具有生命周期的类型

为具有生命周期的类型生成没有意义,因为那样必须创建具有所有值的拥有类型,但它在哪里?可能通过泄露拥有值的类型来实现,但这目前尚未实现。

待办事项

  • 递归,例如 vec 中的 vec
  • 涵盖更多标准库类型
  • 文档化的函数
  • 自定义特质类型/方法名称
  • 加权随机化(目前仅支持 rand::distributions::Standard

许可证

根据您的选择,受Apache License, Version 2.0MIT license 许可证的约束。
除非您明确声明,否则您提交给此crate的任何有意贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,而不附加任何额外条款或条件。

依赖关系

~305–760KB
~18K SLoC