Rust 如何避免impl在锈蚀中重复?

Rust 如何避免impl在锈蚀中重复?,rust,dry,Rust,Dry,我有以下实现,但我不想重复我自己。如何使用在不同结构上具有相同主体的实现而不重复 impl Message for CreateHero { type Result = Result<Hero, Error>; } impl Message for SearchHero { type Result = Result<Hero, Error>; } impl Message for DeleteHero { type Result = Resul

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

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>;
}
CreateHero的impl消息{ 类型结果=结果; } 搜索英雄的impl消息{ 类型结果=结果; } 删除英雄的impl消息{ 类型结果=结果; } 如何避免生锈中的重复,答案通常是宏

您的案例实际上非常简单,正如宏所说:

macro_rules! hero_message {
    ($name : ident) => {
        impl Message for $name {
            type Result = Result<Hero, Error>;
        }
    }
}
hero_message!{CreateHero}
hero_message!{SearchHero}
hero_message!{DeleteHero}
macro\u规则!英雄信息{
($name:ident)=>{
$name的impl消息{
类型结果=结果;
}
}
}
英雄信息!{CreateHero}
英雄信息!{SearchHero}
英雄信息!{DeleteHero}
阅读中的答案,您还可以编写一个通用的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 {}
trait MessageHero{}
T的impl消息{
类型结果=结果;
}
CreateHero{}的impl MessageHero
搜索英雄{}的impl MessageHero
DeleteHero{}的impl MessageHero

什么是
消息
?这是您的特征还是第三方的特征?actix中的第三方:提供了一个属性宏来精确解决这一问题。另请参见链接重复问题的示例。