8个版本
0.4.5 | 2023年10月27日 |
---|---|
0.4.4 | 2022年3月24日 |
0.4.3 | 2021年9月14日 |
0.2.1 | 2021年1月12日 |
0.2.0 |
|
#619 in 数据结构
735 每月下载量
18KB
381 行
every_variant
提供EveryVariant特质,为类型提供every_variant()方法。允许您轻松生成包含枚举的结构或嵌套枚举树中的所有变体的组合。这有助于对使用嵌套枚举树的代码路径进行额外的测试。
EveryVariant derive宏将为您提供every_variant()方法,并为标准类型(如浮点数、整数和字符串)提供一些预设值。
在最低级别生成的数据目前固定为特定值。如果您有依赖于特定格式的字符串的类型,例如,我建议将这些类型单独创建,并手动为这些类型实现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",
},
]
依赖项
~1.2–1.7MB
~39K SLoC