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>>,}