Como posso distinguir entre um campo desserializado que está faltando e um que é nulo?

Eu gostaria de usarSerde analisar alguns JSON como parte de uma solicitação HTTP PATCH. Como as solicitações PATCH não passam o objeto inteiro, apenas os dados relevantes a serem atualizados, eu preciso saber entre um valor que não foi passado, um valor que foi explicitamente definido comonulle um valor presente.

Eu tenho um objeto de valor com vários campos anuláveis:

struct Resource {
    a: Option<i32>,
    b: Option<i32>,
    c: Option<i32>,
}

Se o cliente enviar JSON assim:

{"a": 42, "b": null}

Eu gostaria de mudara paraSome(42), b paraNone, e sairc inalterado.

Tentei agrupar cada campo em mais um nível deOption:

#[derive(Debug, Deserialize)]
struct ResourcePatch {
    a: Option<Option<i32>>,
    b: Option<Option<i32>>,
    c: Option<Option<i32>>,
}

Parque infantil

Isso não faz distinção entreb ec; ambos sãoNone mas eu queriab ser estarSome(None).

Eu não estou vinculado a essa representação de aninhadoOptions; qualquer solução que possa distinguir os três casos seria adequada, como uma que usa uma enumeração personalizada.

questionAnswers(2)

yourAnswerToTheQuestion