2个版本

0.3.1 2021年9月14日
0.3.0 2021年8月2日

#263#variant

Download history 1056/week @ 2024-03-13 1211/week @ 2024-03-20 553/week @ 2024-03-27 1010/week @ 2024-04-03 1027/week @ 2024-04-10 796/week @ 2024-04-17 1699/week @ 2024-04-24 473/week @ 2024-05-01 580/week @ 2024-05-08 493/week @ 2024-05-15 1156/week @ 2024-05-22 775/week @ 2024-05-29 311/week @ 2024-06-05 953/week @ 2024-06-12 363/week @ 2024-06-19 638/week @ 2024-06-26

每月2,364次下载
用于 every_variant

MIT 许可证

12KB
247 代码行

every_variant

提供 EveryVariant trait,它为类型提供 every_variant() 方法。允许您轻松生成包含枚举的结构中的所有变体组合,或嵌套枚举树中的所有变体组合。这样做是为了允许对使用嵌套枚举树的代码路径进行额外的测试。

EveryVariant derive 宏将为您提供 every_variant() 方法,并为诸如浮点数、整数和字符串之类的 std 类型提供一些预设值。

在最低级别生成的数据目前固定为特定值。如果您有依赖于特定字符串的类型,建议将这些类型做成自己的类型,并手动实现 every_variant()。

示例


use every_variant::EveryVariant;

/// Type of the message
#[derive(EveryVariant, Debug, Clone)]
enum MessageType {
    Codified,
    Markdown,
    Html,
}

/// This type should generate 4 different variant
#[derive(EveryVariant, Debug, Clone)]
struct FormattedMessage {
    /// Enum dictating how to render the string, None means its hidden
    rendermethod: Option<MessageType>,
    /// The optional content of the message
    text: String,
}

fn main() {
    let all_diferent_messages = FormattedMessage::every_variant();
    println!("{:#?}", all_diferent_messages);
}


输出将是

[
    FormattedMessage {
        rendermethod: None,
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Codified,
        ),
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Markdown,
        ),
        text: "example String",
    },
    FormattedMessage {
        rendermethod: Some(
            Html,
        ),
        text: "example String",
    },
]

lib.rs:

Proc macros that can help with generating implements of the EveryVariant trait for structs and enums

依赖项

~1.5MB
~36K SLoC