É possível escrever uma macro Rust que será expandida para uma assinatura de função / método?
Gostaria muito de poder algo como o seguinte:
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(),
}
})
Meu exemplo do mundo real apresenta métodos com assinaturas muito maiores que eu tenho que implementar de maneiras únicas para mais de 30 tipos diferentes.
Eu tentei algo semelhante à macro acima, no entanto, encontro erros onde a rustc considerafoo
, bar
ebaz
nomes não resolvidos no site de expansão (mesmo que eu tenha certeza de que a declaração da macro precede lexicamente o uso).
É possível fazer algo assim?
Caso contrário, você pode recomendar uma abordagem que atinja algo semelhante?