[−][src]Derive Macro serde_piecewise_default_derive::DeserializePiecewiseDefault
#[derive(DeserializePiecewiseDefault)]
See the parent crate documentation for a high-level overview.
Implementation Details
#[derive(DeserializePiecewiseDefault)] struct Example { item1: i8, item2: String, }
will expand to
struct Example { item1: i8, item2: String, } #[derive(Deserialize)] struct OptionExample { item1: Option<i8>, item2: Option<String>, } impl<'de> Deserialize<'de> for Example { fn deserialize<D>(deserializer: D) -> Result<Self, D::Error> where D: serde::Deserializer<'de> { <OptionExample as Deserialize>::deserialize(deserializer) .map(|raw_result| { let OptionExample { item1, item2 } = raw_result; let default = <Example as Default>::default(); let item1 = item1.unwrap_or(default.item1); let item2 = item2.unwrap_or(default.item2); Example { item1, item2 } }) } }