rust - 是否有一种惯用的方法来定义属性是 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{
}
这满足类型绑定,但我想知道是否有更好的方法来做到这一点
解决方案
推荐阅读
- python - 如何使用 python selenium 获取所有推文?
- authentication - 我可以通过 cookie 在 Analytics 中注册用户吗?
- javascript - 本地进度条码在 CodePen 上正常工作时出现问题?
- wagtail - 如何在 StreamField 的 TableBlock 模板中添加“标题”标签?
- azure - 如何限制 AzCopy 从 Azure 表存储复制的实体数量?
- objective-c - 无法保存文档“UIViewController.h”。你没有权限
- godot - 我在 godot 3.1 上的动画表有问题
- javascript - Vue 应用程序:为什么 axios 在解析结果后不等待完成?
- julia - 索引不是从 1 或 0 开始并且以 30 而不是 1 递增的 for 循环
- google-cloud-platform - Google Cloud Storage:CORS 设置不适用于签名 URL