Как избежать необходимости Serde использовать признак по умолчанию для поля, которое пропускает сериализацию?


У меня есть эта структура, которая создается десериализацией с помощью Serde, и я хочу, чтобы в ней было поле типа Url, которое не десериализуется:

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

Игровая площадка

Серд жалуется на то, что Url не удовлетворяет черте Default. Я пробовал с выводом и без него Default. Является ли для меня единственным вариантом реализовать Признак Default для Url самого себя?

2 5

2 ответа:

Вы можете использовать #[serde(default = "path")] на поле дать функцию с сигнатурой fn() -> Url, которая должна быть вызвана, если поле отсутствует.

Также можно реализовать Deserialize себя и обращаться с недостающими значениями соответствующим образом.