10 个版本
0.2.7 | 2023 年 10 月 27 日 |
---|---|
0.2.6 | 2023 年 10 月 27 日 |
0.2.5 | 2023 年 5 月 5 日 |
0.2.4 | 2022 年 9 月 14 日 |
0.1.1 | 2022 年 8 月 5 日 |
在 Rust 模式 中排名 #441
每月下载量 3,658
在 diffsync 中使用
17KB
420 行
RandomVariant
返回给定类型的随机变体的特质,如果你正在创建一个新的类型来限制一些值,而不是推导 RandomVariant,则手动实现它以确保只创建正确值(除非你也想尝试 Result 类型)。这对于在代码中查找 unwraps 或其他假设很有用。与 crate EveryVariant 相比,优点是这可以限制为一个更小的测试集,其中生成每个变体可能迅速增长到难以管理的测试集
示例
use serde::Serialize;
use std::net::IpAddr;
#[derive(RandomVariant, Serialize)]
enum Message {
Log(String),
ErrorCode(u32),
/// This tuple will fail to serialize if flattened in serde
Rebooting,
}
#[derive(RandomVariant, Serialize)]
struct LoggedMessage {
/// Fail to serialize, since flatteing enums is not supported
#[serde(flatten)]
t: Message,
add: IpAddr,
}
let mut rng = crate::rand::thread_rng();
/// This allows us to limit the testing set to trying 100 randomized structs
for _i in 0..100 {
let v = LoggedMessage::random_variant(&mut rng);
serde_json::to_string(&v).unwrap();
}
依赖项
~1.4–2MB
~45K SLoC