如何避免 Rust 中的 impl 重复?

Kad*_*BOT 3 dry rust

我有以下实现,但我不想重复自己。如何在不重复的情况下使用在不同结构上具有相同主体的实现?

impl Message for CreateHero {
    type Result = Result<Hero, Error>;
}

impl Message for SearchHero {
    type Result = Result<Hero, Error>;
}

impl Message for DeleteHero {
    type Result = Result<Hero, Error>;
}
Run Code Online (Sandbox Code Playgroud)

rod*_*igo 5

在 Rust 中如何避免重复的答案通常是宏。

你的情况实际上很简单,就像宏一样:

macro_rules! hero_message {
    ($name : ident) => {
        impl Message for $name {
            type Result = Result<Hero, Error>;
        }
    }
}
hero_message!{CreateHero}
hero_message!{SearchHero}
hero_message!{DeleteHero}
Run Code Online (Sandbox Code Playgroud)

阅读链接的重复问题中的答案,您还可以编写一个通用的 trait 实现,对于像您这样的简单问题,它看起来更惯用。它看起来像这样:

trait MessageHero {}

impl<T: MessageHero> Message for T {
    type Result = Result<Hero, Error>;
}

impl MessageHero for CreateHero {}
impl MessageHero for SearchHero {}
impl MessageHero for DeleteHero {}
Run Code Online (Sandbox Code Playgroud)