Add checked actor method
This commit is contained in:
parent
33c262461d
commit
df49fcd1a7
1 changed files with 33 additions and 4 deletions
|
@ -23,7 +23,8 @@
|
||||||
//! # }
|
//! # }
|
||||||
//! ```
|
//! ```
|
||||||
use crate::{
|
use crate::{
|
||||||
base::{AnyBase, AsBase, Base, Extends},
|
base::{AnyBase, AsBase, Base, BaseExt, Extends},
|
||||||
|
error::DomainError,
|
||||||
markers,
|
markers,
|
||||||
object::{ApObject, AsObject, Object},
|
object::{ApObject, AsObject, Object},
|
||||||
primitives::OneOrMany,
|
primitives::OneOrMany,
|
||||||
|
@ -445,7 +446,8 @@ pub trait ActivityExt<Kind>: AsActivity<Kind> {
|
||||||
/// Documentation for the fields related to these methods can be found on the
|
/// Documentation for the fields related to these methods can be found on the
|
||||||
/// `ActorAndObject` struct
|
/// `ActorAndObject` struct
|
||||||
pub trait ActorAndObjectRefExt: ActorAndObjectRef {
|
pub trait ActorAndObjectRefExt: ActorAndObjectRef {
|
||||||
/// Fetch the actor for the current activity
|
/// Fetch the actor for the current activity, erroring if the actor's domain does not match the
|
||||||
|
/// ID's domain
|
||||||
///
|
///
|
||||||
/// ```rust
|
/// ```rust
|
||||||
/// # use activitystreams_new::{context, activity::Create};
|
/// # use activitystreams_new::{context, activity::Create};
|
||||||
|
@ -456,7 +458,34 @@ pub trait ActorAndObjectRefExt: ActorAndObjectRef {
|
||||||
/// let actor_ref = create.actor();
|
/// let actor_ref = create.actor();
|
||||||
/// println!("{:?}", actor_ref);
|
/// println!("{:?}", actor_ref);
|
||||||
/// ```
|
/// ```
|
||||||
fn actor(&self) -> &OneOrMany<AnyBase> {
|
fn actor<'a, Kind>(&'a self) -> Result<&OneOrMany<AnyBase>, DomainError>
|
||||||
|
where
|
||||||
|
Self: BaseExt<Kind>,
|
||||||
|
Kind: 'a,
|
||||||
|
{
|
||||||
|
let unchecked = self.actor_unchecked();
|
||||||
|
|
||||||
|
if unchecked.as_single_id().and_then(|id| id.domain())
|
||||||
|
!= self.id_unchecked().and_then(|id| id.domain())
|
||||||
|
{
|
||||||
|
return Err(DomainError);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(unchecked)
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Fetch the actor for the current activity
|
||||||
|
///
|
||||||
|
/// ```rust
|
||||||
|
/// # use activitystreams_new::{context, activity::Create};
|
||||||
|
/// # let mut create = Create::new(context(), context());
|
||||||
|
/// #
|
||||||
|
/// use activitystreams_new::prelude::*;
|
||||||
|
///
|
||||||
|
/// let actor_ref = create.actor_unchecked();
|
||||||
|
/// println!("{:?}", actor_ref);
|
||||||
|
/// ```
|
||||||
|
fn actor_unchecked(&self) -> &OneOrMany<AnyBase> {
|
||||||
self.actor_field_ref()
|
self.actor_field_ref()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,7 +504,7 @@ pub trait ActorAndObjectRefExt: ActorAndObjectRef {
|
||||||
/// # }
|
/// # }
|
||||||
/// ```
|
/// ```
|
||||||
fn actor_is(&self, id: &Url) -> bool {
|
fn actor_is(&self, id: &Url) -> bool {
|
||||||
self.actor().is_single_id(id)
|
self.actor_unchecked().is_single_id(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Set the actor for the current activity
|
/// Set the actor for the current activity
|
||||||
|
|
Loading…
Reference in a new issue