1

我想生成一个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
}

我的解决方案是implFieldsMappingArticle和的特点Comment

pub trait FieldsMapping {
    fn get_fields_map(&self) -> HashMap<String, usize>;
}

我想为自定义派生编写一个编译器插件FieldsMapping

我的问题是:如何获取编译器插件中的所有字段?我怎么知道字段类型是Vec什么?

4

1 回答 1

5

你没有。

编译器插件(过程宏)在此信息存在之前已展开,因此您无法访问它。不,您不能延迟扩展直到类型存在。不,如果你把它变成一个 lint,你就不能生成代码,这就违背了拥有一个过程宏的目的。

于 2016-09-16T08:46:53.337 回答