From bb5157637d893310e868c73f4fad6d265841d2ff Mon Sep 17 00:00:00 2001 From: Kitaiti Makoto Date: Sun, 13 Feb 2022 01:23:36 +0900 Subject: [PATCH] Implement OneOrMany::to_as_uri() --- plume-common/src/activity_pub/mod.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/plume-common/src/activity_pub/mod.rs b/plume-common/src/activity_pub/mod.rs index cfc589d6..b8853d1b 100644 --- a/plume-common/src/activity_pub/mod.rs +++ b/plume-common/src/activity_pub/mod.rs @@ -1,6 +1,7 @@ use activitypub::{Activity, Link, Object}; use activitystreams::{ actor::{ApActor, Group, Person}, + base::AnyBase, iri_string::types::IriString, markers::Activity as Activity07, object::{ApObject, Article}, @@ -438,6 +439,25 @@ impl AsAsStr for OneOrMany<&AnyString> { } } +pub trait ToAsUri { + fn to_as_uri(&self) -> Option; +} + +impl ToAsUri for OneOrMany { + fn to_as_uri(&self) -> Option { + if let Some(prop) = self.as_one() { + prop.as_xsd_any_uri().map(|uri| uri.to_string()) + } else if let Some(prop) = self.as_many() { + prop.iter() + .next() + .and_then(|p| p.as_xsd_any_uri()) + .map(|uri| uri.to_string()) + } else { + None + } + } +} + #[cfg(test)] mod tests { use super::*;