Add helper deserialize_last() (#148)
This commit is contained in:
parent
0d0f498ddd
commit
cd0f009f5f
2 changed files with 21 additions and 1 deletions
2
Cargo.lock
generated
2
Cargo.lock
generated
|
|
@ -4,7 +4,7 @@ version = 4
|
|||
|
||||
[[package]]
|
||||
name = "activitypub_federation"
|
||||
version = "0.7.0-beta.4"
|
||||
version = "0.7.0-beta.5"
|
||||
dependencies = [
|
||||
"activitystreams-kinds",
|
||||
"actix-web",
|
||||
|
|
|
|||
|
|
@ -116,6 +116,26 @@ where
|
|||
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)]
|
||||
mod tests {
|
||||
#[test]
|
||||
|
|
|
|||
Loading…
Reference in a new issue