Compare commits

...

1 commit

Author SHA1 Message Date
Felix Ableitner
f9ed2efb89 Add helper deserialize_last() 2025-07-28 11:16:17 +02:00
2 changed files with 21 additions and 1 deletions

2
Cargo.lock generated
View file

@ -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",

View file

@ -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]