如何避免 Serde 需要跳过序列化的字段的默认特征?

How to avoid Serde needing the Default trait for a field that skips serialization?

我有这个结构,它是通过使用 Serde 反序列化创建的,我想在其中有一个 Url 类型的字段,它没有被反序列化:

#[derive(Deserialize, Debug)]
pub struct Flow {
    #[serde(skip_deserializing)]
    pub source: Url,
}

Playground

Serde 抱怨 Url 不满足 Default 特征。我试过推导和不推导 Default。是我自己为 Url 实现 Default 特性的唯一选择吗?

您可以在该字段上使用 #[serde(default = "path")] 来提供一个带有签名 fn() -> Url 的函数,如果该字段缺失,则应调用该函数。

您也可以 implement Deserialize 自己适当地处理缺失值。