我想生成一个使用struct字段作为键的HashMap
,并使用usize
整数作为值。
pub struct Article {
title: String,
content: String,
category: String,
comments: Vec<Comment>
}
pub struct Comment {
content: String
}
我的预期输出是:
{
title: 0,
content: 1,
category: 2
comments[].content: 3
}
对于impl
和FieldsMapping
,我的解决方案是Article
我的特质Comment
:
pub trait FieldsMapping {
fn get_fields_map(&self) -> HashMap<String, usize>;
}
我想为自定义派生FieldsMapping
编写一个编译器插件。
我的问题是:如何在编译器插件中获取所有字段?我怎么知道字段类型是Vec
还是其他?
答案 0 :(得分:5)
你没有。
编译器插件(即程序宏)在此信息存在之前进行了扩展,因此您无法访问它。不,在类型存在之前,您无法延迟扩展。不,如果你把它变成一个lint,你就不能生成代码,这会破坏程序宏的目的。