Compare commits
2 commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
35bf29ae73 | ||
|
|
d933b8aeb4 |
3 changed files with 24 additions and 7 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -4,7 +4,7 @@ version = 3
|
|||
|
||||
[[package]]
|
||||
name = "activitypub_federation"
|
||||
version = "0.3.3"
|
||||
version = "0.3.4"
|
||||
dependencies = [
|
||||
"activitystreams-kinds",
|
||||
"actix-rt",
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "activitypub_federation"
|
||||
version = "0.3.4"
|
||||
version = "0.3.5"
|
||||
edition = "2021"
|
||||
description = "High-level Activitypub framework"
|
||||
license = "AGPL-3.0"
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue