Можно ли написать макрос 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 неразрешенные имена на сайте расширения (хотя я уверен, что объявление макроса лексически предшествует использованию).

Можно ли сделать что-то подобное?

Если нет, можете ли вы порекомендовать подход, который позволил бы достичь чего-то подобного?

Ответы на вопрос(1)

Ваш ответ на вопрос