假设我有一个这样的枚举:
enum Option {
A,
B(String),
C(usize)
}
和一个包含多个选项的结构体:
#[derive(Default)]
struct Options {
options: Vec<Option>
}
我想写一个宏,根据枚举变量为该结构体生成构建器方法:
// I want the macro to generate these methods
Options::default()
.a()
.b(String::from("Hey"))
.c(123);
我见过像derive_builder这样的板条箱,但我不确定它是否适用于这个特定的示例。
1条答案
按热度按时间2ledvvac1#
你可以创建一个宏放在枚举上。
这将扩展成一种特质。
然后你可以为
Options
实现这个trait。您可以执行类似thiserror的操作,通过为每个变量添加属性来为方法添加文档。您也许可以将变量的doc注解作为方法的文档来重用,但我不确定。
对于简单类型,derive_builder可以生成一个没有任何这些类型/特征的构建器。