Можно ли написать макрос Rust, который расширится до сигнатуры функции / метода?
Я хотел бы иметь возможность что-то вроде следующего:
macro_rules! impl_a_method(
($obj:ident, $body:block) => (
fn a_method(foo: Foo, bar: Bar, baz: Baz) -> $obj $body
)
)
// Implementation would look like:
impl_a_method!(MyType, {
MyType {
foo: foo.blah(),
bar: bar.bloo(),
baz: baz.floozy(),
}
})
Мой реальный пример показывает методы с гораздо большими сигнатурами, которые я должен реализовать уникальными способами для более 30 различных типов.
Я пробовал что-то похожее на вышеупомянутый макрос, однако я сталкиваюсь с ошибками, где считает rustcfoo
, bar
а такжеbaz
неразрешенные имена на сайте расширения (хотя я уверен, что объявление макроса лексически предшествует использованию).
Можно ли сделать что-то подобное?
Если нет, можете ли вы порекомендовать подход, который позволил бы достичь чего-то подобного?