How can I deserialize a type where all the fields are default values as a None instead? How can I deserialize a type where all the fields are default values as a None instead? json json

How can I deserialize a type where all the fields are default values as a None instead?


You can look at an example of custom field deserializing.

In particular, you might want to define something like

extern crate serde; // 1.0.78#[macro_use]extern crate serde_derive; // 1.0.78use serde::{Deserialize, Deserializer, de::Visitor};fn none_if_all_default<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>where    T: Deserialize<'de>,    D: Deserializer<'de> + Clone,{    struct AllDefault;    impl<'de> Visitor<'de> for AllDefault {        type Value = bool;        // Implement the visitor functions here -        // You can recurse over all values to check if they're        // the empty string or 0, and return true        //...    }    let all_default = deserializer.clone().deserialize_any(AllDefault)?;    if all_default {        Ok(None)    } else {        Ok(Some(T::deserialize(deserializer)?))    }}

And then do

#[derive(Deserialize)]struct Outer2 {    #[serde(deserialize_with = "none_if_all_default")]    test: Option<Test<Foo>>,}