首页 > 解决方案 > 是否有一种惯用的方法来定义属性是 A 型还是 B 型?

问题描述

我正在开发一个将通过 TCP 进行消息传递的应用程序。

pub struct Message<T> where T: IsMessageType{
    message_type: T,
    length: u16,
    payload: [u8],
}

我希望消息类型为 IncomingMessageType 或 OutgoingMessageType。这两种类型都是枚举,表示可以通过 TCP 流来回传递的数据类型,但是由于可以对它们执行的操作不同,我不想将它们表示为单一类型。有没有一种惯用的方式来表示这个约束?

我目前的实现如下。

//Define empty trait
pub trait IsMessageType{

}

pub enum IncomingMessageType {
    GetGPPVersion,
    GetDSPVersion,
    GetFPGAVersion,
    SetGPPVersion(Version),
    SetDSPVersion(Version),
    SetFPGAVersion(Version),
    StopGPP,
    StartGPP,
    DownloadBinaries,
}

//Implement the trait for the incoming message type
impl IsMessageType for IncomingMessageType{

}

pub enum OutgoingMessageType{
    GetGPPVersion,
    GetDSPVersion,
    GetFPGAVersion,
    ACK,
    NACK,
}

//And the outgoing message type
impl IsMessageType for OutgoingMessageType{

}

这满足类型绑定,但我想知道是否有更好的方法来做到这一点

标签: rust

解决方案


推荐阅读