如何解决有没有办法自动为许多结构实现相同的功能?
如您所见,以下所有类型都具有相同的结构:
type Response = rtsp_types::Response<Body>;
struct PlayResponse(Response);
struct DescribeResponse(Response);
struct SetupResponse(Response);
struct PauseResponse(Response);
struct TeardownResponse(Response);
struct RecordResponse(Response);
struct UnauthorizedResponse(Response);
我想为他们做同样的实现:
impl From<Response> for PlayResponse {
fn from(response: Response) -> Self {
PlayResponse(response)
}
}
impl From<Response> for DescribeResponse {
fn from(response: Response) -> Self {
DescribeResponse(response)
}
}
//...
但我不想重复。
我知道我可以对所有这些进行枚举,但是由于太大的原因无法放在这里,因此该解决方案不适用于我的问题。
为所有这些结构实现 From
的最佳方法是什么,就像我做的示例实现一样?宏?没有办法在 T 上做一个通用的实现吗?
解决方法
您可以使用 duplicate 板条箱轻松完成此操作:
use duplicate::duplicate_inline;
type Response = rtsp_types::Response<Body>;
duplicate_inline!{
[
Name;
[PlayResponse];
[DescribeResponse];
[SetupResponse];
[PauseResponse];
[TeardownResponse];
[RecordResponse];
[UnauthorizedResponse];
]
struct Name(Response);
impl From<Response> for Name {
fn from(response: Response) -> Self {
Name(response)
}
}
}
这将声明每个结构及其实现,用 Name
替换每个结构的名称。
传统的方法只是制作一个声明性宏,为您的各种类型实现 From
:
type Response = rtsp_types::Response<Body>;
struct PlayResponse(Response);
struct DescribeResponse(Response);
struct SetupResponse(Response);
struct PauseResponse(Response);
struct TeardownResponse(Response);
struct RecordResponse(Response);
struct UnauthorizedResponse(Response);
macro_rules! impl_from_response {
($t:ident) => {
impl From<Response> for $t {
fn from(response: Response) -> Self {
$t(response)
}
}
}
}
impl_from_response!(PlayResponse);
impl_from_response!(DescribeResponse);
impl_from_response!(SetupResponse);
impl_from_response!(PauseResponse);
impl_from_response!(TeardownResponse);
impl_from_response!(RecordResponse);
impl_from_response!(UnauthorizedResponse);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。