2个不稳定版本

0.2.0 2022年8月29日
0.1.0 2022年8月5日

#variant 中排名第 267

Download history · Rust 包仓库 1050/week @ 2024-03-13 · Rust 包仓库 1175/week @ 2024-03-20 · Rust 包仓库 532/week @ 2024-03-27 · Rust 包仓库 977/week @ 2024-04-03 · Rust 包仓库 1004/week @ 2024-04-10 · Rust 包仓库 785/week @ 2024-04-17 · Rust 包仓库 1692/week @ 2024-04-24 · Rust 包仓库 446/week @ 2024-05-01 · Rust 包仓库 559/week @ 2024-05-08 · Rust 包仓库 490/week @ 2024-05-15 · Rust 包仓库 1163/week @ 2024-05-22 · Rust 包仓库 764/week @ 2024-05-29 · Rust 包仓库 293/week @ 2024-06-05 · Rust 包仓库 960/week @ 2024-06-12 · Rust 包仓库 348/week @ 2024-06-19 · Rust 包仓库 614/week @ 2024-06-26 · Rust 包仓库

每月下载量 2,303
2 个crate中使用(通过 random_variant

MIT 许可证

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