Add convenience methods to AnyString

This commit is contained in:
Aode (lion) 2022-02-13 14:24:07 -06:00
parent b7f178f2b6
commit 3123fff5a8
5 changed files with 62 additions and 9 deletions

View file

@ -1,5 +1,8 @@
# Unreleased # Unreleased
# 0.7.0-alpha.19
- Add `.as_str()`, `.language()` and `impl AsRef<str>` for `AnyString`
# 0.7.0-alpha.18 # 0.7.0-alpha.18
- expose `Either` type publicly - expose `Either` type publicly

View file

@ -1,7 +1,7 @@
[package] [package]
name = "activitystreams" name = "activitystreams"
description = "A set of core types and traits for activitystreams data" description = "A set of core types and traits for activitystreams data"
version = "0.7.0-alpha.18" version = "0.7.0-alpha.19"
license = "GPL-3.0" license = "GPL-3.0"
authors = ["asonix <asonix@asonix.dog>"] authors = ["asonix <asonix@asonix.dog>"]
repository = "https://git.asonix.dog/Aardwolf/activitystreams" repository = "https://git.asonix.dog/Aardwolf/activitystreams"

View file

@ -11,7 +11,7 @@ _A set of Traits and Types that make up the ActivityStreams and ActivityPub spec
First, add ActivityStreams to your dependencies First, add ActivityStreams to your dependencies
```toml ```toml
[dependencies] [dependencies]
activitystreams = "0.7.0-alpha.11" activitystreams = "0.7.0-alpha.19"
``` ```
### Types ### Types
@ -164,14 +164,14 @@ If you want to make a function that manipulates an Activity, but not a normal ob
bound the function like so: bound the function like so:
```rust ```rust
use activitystreams::{base::BaseExt, context, markers::Activity, uri}; use activitystreams::{base::BaseExt, context, markers::Activity, iri};
fn manipulator<T, Kind>(mut activity: T) -> Result<(), anyhow::Error> fn manipulator<T, Kind>(mut activity: T) -> Result<(), anyhow::Error>
where where
T: Activity + BaseExt<Kind>, T: Activity + BaseExt<Kind>,
{ {
activity activity
.set_id(uri!("https://example.com")) .set_id(iri!("https://example.com"))
.set_context(context()); .set_context(context());
Ok(()) Ok(())
} }
@ -205,7 +205,7 @@ use activitystreams::{
context, context,
object::{ApObject, Video}, object::{ApObject, Video},
prelude::*, prelude::*,
uri, iri,
}; };
fn main() -> Result<(), anyhow::Error> { fn main() -> Result<(), anyhow::Error> {
@ -213,12 +213,12 @@ fn main() -> Result<(), anyhow::Error> {
video video
.set_context(context()) .set_context(context())
.set_id(uri!("https://example.com/@example/lions")) .set_id(iri!("https://example.com/@example/lions"))
.set_media_type("video/webm".parse()?) .set_media_type("video/webm".parse()?)
.set_url(uri!("https://example.com/@example/lions/video.webm")) .set_url(iri!("https://example.com/@example/lions/video.webm"))
.set_summary("A cool video") .set_summary("A cool video")
.set_duration("PT4M20S".parse()?) .set_duration("PT4M20S".parse()?)
.set_shares(uri!("https://example.com/@example/lions/video.webm#shares")); .set_shares(iri!("https://example.com/@example/lions/video.webm#shares"));
println!("Video, {:#?}", video); println!("Video, {:#?}", video);

View file

@ -11,7 +11,7 @@
//! First, add ActivityStreams to your dependencies //! First, add ActivityStreams to your dependencies
//! ```toml //! ```toml
//! [dependencies] //! [dependencies]
//! activitystreams = "0.7.0-alpha.11" //! activitystreams = "0.7.0-alpha.19"
//! ``` //! ```
//! //!
//! ### Types //! ### Types

View file

@ -155,6 +155,56 @@ impl AnyString {
{ {
self.0 = Either::Right(string.into()); self.0 = Either::Right(string.into());
} }
/// Borrow the inner str
///
/// ```rust
/// use activitystreams::primitives::{AnyString, RdfLangString};
/// let any_string = AnyString::from_xsd_string("hi");
///
/// assert_eq!(any_string.as_str(), "hi");
///
/// let any_string = AnyString::from_rdf_lang_string(RdfLangString {
/// value: "hi".into(),
/// language: "en".into(),
/// });
///
/// assert_eq!(any_string.as_str(), "hi");
/// ```
pub fn as_str(&self) -> &str {
match self.0 {
Either::Left(ref s) => s,
Either::Right(ref lang_str) => &lang_str.value,
}
}
/// Borrow the inner language
///
/// ```rust
/// use activitystreams::primitives::{AnyString, RdfLangString};
/// let any_string = AnyString::from_xsd_string("hi");
///
/// assert_eq!(any_string.language(), None);
///
/// let any_string = AnyString::from_rdf_lang_string(RdfLangString {
/// value: "hi".into(),
/// language: "en".into(),
/// });
///
/// assert_eq!(any_string.language(), Some("en"));
/// ```
pub fn language(&self) -> Option<&str> {
match self.0 {
Either::Left(_) => None,
Either::Right(ref lang_str) => Some(&lang_str.language),
}
}
}
impl AsRef<str> for AnyString {
fn as_ref(&self) -> &str {
self.as_str()
}
} }
impl OneOrMany<AnyString> { impl OneOrMany<AnyString> {