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 进程宏
746 每月下载量
在 10 个crate中使用 (9 直接)
18KB
381 行
Rand derive 2
使用rand crate生成随机类型的宏。它会为给定类型实现rand::distributions::Standard
。
用法
查看示例crate或按照以下说明操作。
- 将此添加到您的Cargo.toml文件中
[dependencies]
rand_derive2 = "0.1"
rand = "0.8"
- 在文件中导入宏,位置在您的类型附近
use rand_derive2::RandGen;
或者,全局导入宏
#[macro_use]
extern crate rand_derive2;
- 为您的类型添加RandGen derive宏
#[derive(RandGen)]
struct MyStruct {}
- 生成您的结构体
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.0 或 MIT license 许可证的约束。除非您明确声明,否则您提交给此crate的任何有意贡献,根据Apache-2.0许可证的定义,应按上述方式双许可,而不附加任何额外条款或条件。
依赖关系
~305–760KB
~18K SLoC