¿Es posible escribir una macro Rust que se expandirá en una firma de función / método?
Me encantaría poder hacer algo como lo siguiente:
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(),
}
})
Mi ejemplo del mundo real presenta métodos con firmas mucho más grandes que tengo que implementar de maneras únicas para más de 30 tipos diferentes.
He intentado algo similar a la macro anterior, sin embargo, me encuentro con errores donde rustc considerafoo
, bar
ybaz
nombres no resueltos en el sitio de expansión (aunque estoy seguro de que la declaración de macro precede léxico al uso).
¿Es posible hacer algo como esto?
Si no, ¿puede recomendar un enfoque que logre algo similar?