Как получить структурные поля и тип полей в плагине компилятора?
Я хочу создать 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
или другой?
1 ответ
Решение
Вы не
Плагины компилятора (т.е. процедурные макросы) раскрываются до того, как эта информация существует, поэтому вы не можете получить к ней доступ. Нет, вы не можете отложить расширение, пока типы не существуют. Нет, если вы превратите его в пух, вы не сможете сгенерировать код, который затем лишается цели иметь процедурный макрос.