Add helper deserialize_last()
This commit is contained in:
parent
0d0f498ddd
commit
f9ed2efb89
2 changed files with 21 additions and 1 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -4,7 +4,7 @@ version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "activitypub_federation"
|
name = "activitypub_federation"
|
||||||
version = "0.7.0-beta.4"
|
version = "0.7.0-beta.5"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"activitystreams-kinds",
|
"activitystreams-kinds",
|
||||||
"actix-web",
|
"actix-web",
|
||||||
|
|
|
||||||
|
|
@ -116,6 +116,26 @@ where
|
||||||
Ok(inner)
|
Ok(inner)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Deserialize either single value or last item from an array into an optional field.
|
||||||
|
pub fn deserialize_last<'de, T, D>(deserializer: D) -> Result<Option<T>, D::Error>
|
||||||
|
where
|
||||||
|
T: Deserialize<'de>,
|
||||||
|
D: Deserializer<'de>,
|
||||||
|
{
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(untagged)]
|
||||||
|
enum MaybeArray<T> {
|
||||||
|
Simple(T),
|
||||||
|
Array(Vec<T>),
|
||||||
|
}
|
||||||
|
|
||||||
|
let result: MaybeArray<T> = Deserialize::deserialize(deserializer)?;
|
||||||
|
Ok(match result {
|
||||||
|
MaybeArray::Simple(value) => Some(value),
|
||||||
|
MaybeArray::Array(value) => value.into_iter().last(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
#[test]
|
#[test]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue