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::*;