Skip to content

Commit

Permalink
Fix deserialize_skip_error function (#24)
Browse files Browse the repository at this point in the history
  • Loading branch information
Nutomic committed Feb 4, 2023
1 parent 463580d commit 6d9682f
Showing 1 changed file with 22 additions and 5 deletions.
27 changes: 22 additions & 5 deletions src/deser/helpers.rs
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,26 @@ where
T: Deserialize<'de> + Default,
D: Deserializer<'de>,
{
let result = Deserialize::deserialize(deserializer);
Ok(match result {
Ok(o) => o,
Err(_) => Default::default(),
})
let value = serde_json::Value::deserialize(deserializer)?;
let inner = T::deserialize(value).unwrap_or_default();
Ok(inner)
}

#[cfg(test)]
mod tests {
use super::*;

#[test]
fn test_deserialize_skip_error() {
#[derive(Debug, Deserialize)]
pub struct MyData {
#[serde(deserialize_with = "deserialize_skip_error")]
pub data: Option<String>,
}
// data has type object
let _: MyData = serde_json::from_str(r#"{ "data": {} }"#).unwrap();

// data has type array
let _: MyData = serde_json::from_str(r#"{"data": []}"#).unwrap();
}
}

0 comments on commit 6d9682f

Please sign in to comment.