Compare commits

...

2 commits
main ... 0.3

Author SHA1 Message Date
Felix Ableitner
35bf29ae73 Version 0.3.5 2023-02-05 01:02:16 +09:00
Felix Ableitner
d933b8aeb4 Fix deserialize_skip_error function
https://github.com/serde-rs/serde/issues/1726#issuecomment-577425541
2023-02-05 01:01:55 +09:00
3 changed files with 24 additions and 7 deletions

2
Cargo.lock generated
View file

@ -4,7 +4,7 @@ version = 3
[[package]] [[package]]
name = "activitypub_federation" name = "activitypub_federation"
version = "0.3.3" version = "0.3.4"
dependencies = [ dependencies = [
"activitystreams-kinds", "activitystreams-kinds",
"actix-rt", "actix-rt",

View file

@ -1,6 +1,6 @@
[package] [package]
name = "activitypub_federation" name = "activitypub_federation"
version = "0.3.4" version = "0.3.5"
edition = "2021" edition = "2021"
description = "High-level Activitypub framework" description = "High-level Activitypub framework"
license = "AGPL-3.0" license = "AGPL-3.0"

View file

@ -58,9 +58,26 @@ where
T: Deserialize<'de> + Default, T: Deserialize<'de> + Default,
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
let result = Deserialize::deserialize(deserializer); let value = serde_json::Value::deserialize(deserializer)?;
Ok(match result { let inner = T::deserialize(value).unwrap_or_default();
Ok(o) => o, Ok(inner)
Err(_) => Default::default(), }
})
#[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();
}
} }