我有一个 JSON API,它返回一个如下所示的对象:
{
"PrivatePort": 2222,
"PublicPort": 3333,
"Type": "tcp"
}
Run Code Online (Sandbox Code Playgroud)
为了捕捉这一点,我有一个枚举和一个结构:
{
"PrivatePort": 2222,
"PublicPort": 3333,
"Type": "tcp"
}
Run Code Online (Sandbox Code Playgroud)
目前,该 API 仅支持 中列出的三种协议PortType,但我们假设DCCP将来会添加对 的支持。我不希望 API 的客户端仅仅因为他们可能没有查看的配置选项中的未知字符串而开始失败。
为了解决这个问题,我添加了一个Unknown带有的变体String来表示值:
#[derive(Eq, PartialEq, Deserialize, Serialize, Debug)]
#[serde(rename_all = "snake_case")]
pub enum PortType {
Sctp,
Tcp,
Udp,
}
#[derive(Deserialize, Serialize, Debug)]
#[serde(rename_all = "PascalCase")]
pub struct PortMapping {
pub private_port: u16,
pub public_port: u16,
#[serde(rename = "Type")]
pub port_type: PortType,
}
Run Code Online (Sandbox Code Playgroud)
这里的目标是在PortType::Unknown("dccp")传入未知值时最终得到稍微不方便的值。当然,这不会做我想要的开箱即用的 - 传递未知 …