我正在使用宏来生成一系列枚举变量。我想为每个文档添加一些文档,可以使用#[doc = "..."]
属性来完成。如果有字符串文字,这可以很好地工作,但是每个宏变体都有一些我想放入文档字符串中的其他数据。
在普通代码中,我将使用format!
来生成格式化的字符串。有什么办法可以在宏中执行此操作吗?
这是一个最小的例子。它尝试生成每个变量具有doc属性的三变量枚举。如果将format!
宏替换为字符串文字,则可以正常工作。
macro_rules! fancy_enum {
($($name:ident => ($str:expr, $int:expr)),+) => {
pub enum Fancy {
$(
#[doc = format!("Variant with string {} and value {}", $str, $int)]
$name
),+
}
}
}
fancy_enum!(
A => ("alpha", 1),
B => ("bravo", 2),
C => ("charlie", 3)
);