Function etwin_serde_tools::deserialize_explicit_option [−][src]
pub fn deserialize_explicit_option<'de, T, D>(
deserializer: D
) -> Result<Option<T>, D::Error> where
T: Deserialize<'de>,
D: Deserializer<'de>,
Expand description
Deserializes an optional field that can’t be missing.
The field must always be defined, either with a value or explicitly unset (e.g. with null
).
Use this to prevent undefined
from being deserialized as None
when parsing JSON.
use serde::{Deserialize, Serialize}; use etwin_serde_tools::deserialize_explicit_option; #[derive(Serialize, Deserialize)] #[derive(Debug, PartialEq, Eq)] struct User { id: u32, #[serde(deserialize_with = "deserialize_explicit_option")] username: Option<String>, } assert!(serde_json::from_str::<User>(r#"{"id":1}"#).is_err()); assert_eq!( serde_json::from_str::<User>(r#"{"id":1,"username":null}"#).unwrap(), User { id: 1, username: None } ); assert_eq!( serde_json::from_str::<User>(r#"{"id":1,"username":"demurgos"}"#).unwrap(), User { id: 1, username: Some("demurgos".to_string()) } );