Add helper deserialize_last() (#148)

This commit is contained in:
Nutomic 2025-07-28 09:22:36 +00:00 committed by GitHub
parent 0d0f498ddd
commit cd0f009f5f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 21 additions and 1 deletions

2
Cargo.lock generated
View file

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

View file

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