2016-09-16 40 views
1

我想要生成一個使用結構字段作爲關鍵字的HashMap,並使用usize整數作爲值。如何在編譯器插件中獲取struct字段和字段類型?

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我的兩個ArticleComment特質FieldsMapping

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

我想自定義導出FieldsMapping寫一個編譯器插件。

我的問題是:我如何獲得編譯器插件中的所有字段?我怎麼能知道字段類型是Vec或其他?

回答

5

你沒有。

編譯器插件(過程宏)在此信息存在之前展開,因此您無法訪問它。不,你不能在類型存在之前延遲擴展。不,如果你把它變成皮棉,你就不能生成代碼,這就違背了創建程序宏的目的。