2个不稳定版本
0.2.0 | 2022年8月29日 |
---|---|
0.1.0 | 2022年8月5日 |
在 #variant 中排名第 267
每月下载量 2,303
在 2 个crate中使用(通过 random_variant)
10KB
182 行
RandomVariant
返回给定类型的随机变体的特质,如果您正在创建一个新类型来限制某些值,而不是派生RandomVariant,则手动实现它以确保只创建正确的值(除非您还想要尝试Result类型)。这有助于查找代码中的unwrap或其他假设,与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();
}
lib.rs
:
进程宏可以帮助为结构和枚举生成EveryVariant特质的实现
依赖关系
~1.5MB
~35K SLoC