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

Download history 1088/week @ 2024-04-27 410/week @ 2024-05-04 596/week @ 2024-05-11 981/week @ 2024-05-18 910/week @ 2024-05-25 431/week @ 2024-06-01 668/week @ 2024-06-08 624/week @ 2024-06-15 618/week @ 2024-06-22 243/week @ 2024-06-29 11/week @ 2024-07-06 72/week @ 2024-07-13 224/week @ 2024-07-20 765/week @ 2024-07-27 1265/week @ 2024-08-03 1392/week @ 2024-08-10

每月下载量 3,658
diffsync 中使用

MIT 许可证 MIT

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