Unfair #rustlang #serde Quiz: What's the difference between these four types' deserialization behavior (ignoring the type name)?

#[derive(Deserialize)]
struct One {
field: Option<String>,
}

#[derive(Deserialize)]
struct Two {
#[serde(default)]
field: Option<String>,
}

#[derive(Deserialize)]
struct Three {
#[serde(deserialize_with = "Option::deserialize")]
field: Option<String>,
}

#[derive(Deserialize)]
struct Four {
#[serde(default, deserialize_with = "Option::deserialize")]
field: Option<String>,
}

@jplatte when the field is missing the ones with serde(default) will have the value from the Default impl for the struct, unlike the ones missing it which will be None. the ones with deserialize_with will behave the same as without
@vavakado No, serde(default) uses the Default impl of the field type, not the struct's Default impl. And deserialize_with does make a difference, otherwise I wouldn't have included it x)