2个版本
0.3.1 | 2021年9月14日 |
---|---|
0.3.0 | 2021年8月2日 |
#263 在 #variant
每月2,364次下载
用于 every_variant
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