Как получить структурные поля и тип полей в плагине компилятора?

Я хочу создать 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 ответ

Решение

Вы не

Плагины компилятора (т.е. процедурные макросы) раскрываются до того, как эта информация существует, поэтому вы не можете получить к ней доступ. Нет, вы не можете отложить расширение, пока типы не существуют. Нет, если вы превратите его в пух, вы не сможете сгенерировать код, который затем лишается цели иметь процедурный макрос.

Другие вопросы по тегам