Ist es möglich, ein Rust-Makro zu schreiben, das zu einer Funktions- / Methodensignatur erweitert wird?
Ich würde gerne in der Lage sein, Folgendes zu tun:
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(),
}
})
In meinem realen Beispiel sind Methoden mit viel größeren Signaturen enthalten, die ich für mehr als 30 verschiedene Typen auf einzigartige Weise implementieren muss.
Ich habe etwas Ähnliches wie das obige Makro ausprobiert, bin jedoch auf Fehler gestoßen, bei denen rustc berücksichtigtfoo
, bar
undbaz
ungelöste Namen an der Erweiterungssite (obwohl ich sicher bin, dass die Makrodeklaration der Verwendung lexikalisch vorausgeht).
Kann man so etwas machen?
Wenn nicht, können Sie einen Ansatz empfehlen, mit dem sich etwas Ähnliches erreichen lässt?