Я пишу процедурный макрос, который принимает имя признака и генерирует структуру нового типа, в которой хранится разработчик этого признака (T
) и реализует признак, используя реализацию на T
. По сути, эта структура нового типа изолирует одну черту объекта и «запечатывает внутри» реализации для всех других черт.
Для правильной работы макрос должен найти черту в области сайта вызова ( что легко сделать, ссылаясь на признак так же, как это делает вызов), сгенерировать имя для нового типа на основе имени признака (в моем случае, Only{trait_name}
, например, OnlyDisplay
), получить список методов и связанных функций / типов / констант в признаке и реализовать их с self.{method_name}({parameters})
(для методов) или Self::{assoc_name}
для связанных членов. Этот шаг меня смущает: ни Синкрейт, ни proc_macro
не предоставляют методов для определения черт по их Ident
s и последующего внутреннего анализа.
Итак, как мне найти черту по Ident
в текущем объеме и получить список всего в своем определении?