diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be0b27..03deea6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,5 @@ # Unreleased +- Add `to_owned` to `OneOrMany<&'a AnyString>` # 0.7.0-alpha.11 - Update summary and content to return `OneOrMany<&'a AnyString>` diff --git a/src/primitives/any_string.rs b/src/primitives/any_string.rs index afadb6c..5ec9f53 100644 --- a/src/primitives/any_string.rs +++ b/src/primitives/any_string.rs @@ -345,6 +345,25 @@ impl OneOrMany<&AnyString> { self.as_one() .and_then(|any_string| any_string.as_rdf_lang_string()) } + + /// Create and owned clone of the OneOrMany + /// + /// ```rust + /// # use activitystreams::primitives::{OneOrMany, AnyString}; + /// # let string = OneOrMany::::from_xsd_string("hey"); + /// + /// let borrowed_string: OneOrMany<&AnyString> = string.as_ref(); + /// + /// let owned_one_or_many: OneOrMany = borrowed_string.to_owned(); + /// ``` + pub fn to_owned(self) -> OneOrMany { + match self.0 { + Either::Left(one_ref) => OneOrMany(Either::Left(one_ref.to_owned())), + Either::Right(many_ref) => { + OneOrMany(Either::Right(many_ref.into_iter().cloned().collect())) + } + } + } } impl From<&str> for AnyString {