Add Actor wrapper, new method
This commit is contained in:
parent
ed2bf31517
commit
f62902a7aa
5 changed files with 100 additions and 74 deletions
|
@ -2456,10 +2456,7 @@ impl<Inner> markers::IntransitiveActivity for ApObject<Inner> where
|
|||
{
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for Activity<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for Activity<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -2489,10 +2486,7 @@ impl<Kind> TryFrom<Activity<Kind>> for Object<Kind> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for ActorAndObject<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for ActorAndObject<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -2612,10 +2606,7 @@ impl TryFrom<Delete> for Object<DeleteType> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for ActorAndObjectOptOriginAndTarget<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for ActorAndObjectOptOriginAndTarget<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -2645,10 +2636,7 @@ impl<Kind> TryFrom<ActorAndObjectOptOriginAndTarget<Kind>> for Object<Kind> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for ActorAndObjectOptTarget<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for ActorAndObjectOptTarget<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
|
113
src/actor.rs
113
src/actor.rs
|
@ -594,33 +594,33 @@ pub trait ApActorExt<Inner>: AsApActor<Inner> {
|
|||
|
||||
/// Describes a software application.
|
||||
///
|
||||
/// This is just an alias for `Object<ApplicationType>` because there's no fields inherent to
|
||||
/// Application that aren't already present on an Object.
|
||||
pub type Application = Object<ApplicationType>;
|
||||
/// This is just an alias for `Actor<ApplicationType>` because there's no fields inherent to
|
||||
/// Application that aren't already present on an Actor.
|
||||
pub type Application = Actor<ApplicationType>;
|
||||
|
||||
/// Represents a formal or informal collective of Actors.
|
||||
///
|
||||
/// This is just an alias for `Object<GroupType>` because there's no fields inherent to
|
||||
/// Group that aren't already present on an Object.
|
||||
pub type Group = Object<GroupType>;
|
||||
/// This is just an alias for `Actor<GroupType>` because there's no fields inherent to
|
||||
/// Group that aren't already present on an Actor.
|
||||
pub type Group = Actor<GroupType>;
|
||||
|
||||
/// Represents an organization.
|
||||
///
|
||||
/// This is just an alias for `Object<OrganizationType>` because there's no fields inherent to
|
||||
/// Organization that aren't already present on an Object.
|
||||
pub type Organization = Object<OrganizationType>;
|
||||
/// This is just an alias for `Actor<OrganizationType>` because there's no fields inherent to
|
||||
/// Organization that aren't already present on an Actor.
|
||||
pub type Organization = Actor<OrganizationType>;
|
||||
|
||||
/// Represents an individual person.
|
||||
///
|
||||
/// This is just an alias for `Object<PersonType>` because there's no fields inherent to
|
||||
/// Person that aren't already present on an Object.
|
||||
pub type Person = Object<PersonType>;
|
||||
/// This is just an alias for `Actor<PersonType>` because there's no fields inherent to
|
||||
/// Person that aren't already present on an Actor.
|
||||
pub type Person = Actor<PersonType>;
|
||||
|
||||
/// Represents a service of any kind.
|
||||
///
|
||||
/// This is just an alias for `Object<ServiceType>` because there's no fields inherent to
|
||||
/// Service that aren't already present on an Object.
|
||||
pub type Service = Object<ServiceType>;
|
||||
/// This is just an alias for `Actor<ServiceType>` because there's no fields inherent to
|
||||
/// Service that aren't already present on an Actor.
|
||||
pub type Service = Actor<ServiceType>;
|
||||
|
||||
/// Actor types are Object types that are capable of performing activities.
|
||||
///
|
||||
|
@ -790,6 +790,33 @@ pub struct Endpoints {
|
|||
pub shared_inbox: Option<XsdAnyUri>,
|
||||
}
|
||||
|
||||
/// A simple type to create an Actor out of any Object
|
||||
///
|
||||
/// ```rust
|
||||
/// # use activitystreams_new::{object::Object, actor::Actor, prelude::*};
|
||||
/// let object = Object::<String>::new();
|
||||
/// let mut actor = Actor(object);
|
||||
/// actor.set_kind("MyCustomActor".into());
|
||||
/// ```
|
||||
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
|
||||
#[serde(transparent)]
|
||||
pub struct Actor<Kind>(pub Object<Kind>);
|
||||
|
||||
impl<Kind> Actor<Kind> {
|
||||
/// Create a new Actor
|
||||
///
|
||||
/// ```rust
|
||||
/// # use activitystreams_new::actor::Actor;
|
||||
/// let actor = Actor::<String>::new();
|
||||
/// ```
|
||||
pub fn new() -> Self
|
||||
where
|
||||
Kind: Default,
|
||||
{
|
||||
Actor(Object::new())
|
||||
}
|
||||
}
|
||||
|
||||
impl<Inner> ApActor<Inner> {
|
||||
/// Create a new ActivityPub Actor
|
||||
///
|
||||
|
@ -872,26 +899,24 @@ impl<Inner> ApActor<Inner> {
|
|||
}
|
||||
}
|
||||
|
||||
impl markers::Actor for Application {}
|
||||
impl markers::Actor for Group {}
|
||||
impl markers::Actor for Organization {}
|
||||
impl markers::Actor for Person {}
|
||||
impl markers::Actor for Service {}
|
||||
impl<Kind> markers::Base for Actor<Kind> {}
|
||||
impl<Kind> markers::Object for Actor<Kind> {}
|
||||
impl<Kind> markers::Actor for Actor<Kind> {}
|
||||
|
||||
impl<Inner> markers::Base for ApActor<Inner> where Inner: markers::Base {}
|
||||
impl<Inner> markers::Object for ApActor<Inner> where Inner: markers::Object {}
|
||||
impl<Inner> markers::Actor for ApActor<Inner> where Inner: markers::Actor {}
|
||||
|
||||
impl<Inner, Kind> Extends<Kind> for ApActor<Inner>
|
||||
impl<Inner, Kind, Error> Extends<Kind> for ApActor<Inner>
|
||||
where
|
||||
Inner: Extends<Kind, Error = serde_json::Error> + UnparsedMut + markers::Actor,
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
Inner: Extends<Kind, Error = Error> + UnparsedMut + markers::Actor,
|
||||
Error: From<serde_json::Error> + std::error::Error,
|
||||
{
|
||||
type Error = serde_json::Error;
|
||||
type Error = Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
let inner = Inner::extends(base)?;
|
||||
Self::extending(inner)
|
||||
Ok(Self::extending(inner)?)
|
||||
}
|
||||
|
||||
fn retracts(self) -> Result<Base<Kind>, Self::Error> {
|
||||
|
@ -961,4 +986,42 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for Actor<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
Object::extends(base).map(Actor)
|
||||
}
|
||||
|
||||
fn retracts(self) -> Result<Base<Kind>, Self::Error> {
|
||||
self.0.retracts()
|
||||
}
|
||||
}
|
||||
|
||||
impl<Kind> UnparsedMut for Actor<Kind> {
|
||||
fn unparsed_mut(&mut self) -> &mut Unparsed {
|
||||
self.0.unparsed_mut()
|
||||
}
|
||||
}
|
||||
|
||||
impl<Kind> AsBase<Kind> for Actor<Kind> {
|
||||
fn base_ref(&self) -> &Base<Kind> {
|
||||
self.0.base_ref()
|
||||
}
|
||||
|
||||
fn base_mut(&mut self) -> &mut Base<Kind> {
|
||||
self.0.base_mut()
|
||||
}
|
||||
}
|
||||
|
||||
impl<Kind> AsObject<Kind> for Actor<Kind> {
|
||||
fn object_ref(&self) -> &Object<Kind> {
|
||||
self.0.object_ref()
|
||||
}
|
||||
|
||||
fn object_mut(&mut self) -> &mut Object<Kind> {
|
||||
self.0.object_mut()
|
||||
}
|
||||
}
|
||||
|
||||
impl<T, Inner> ApActorExt<Inner> for T where T: AsApActor<Inner> {}
|
||||
|
|
|
@ -1202,10 +1202,7 @@ impl markers::CollectionPage for OrderedCollectionPage {}
|
|||
impl<Inner> markers::Collection for ApObject<Inner> where Inner: markers::Collection {}
|
||||
impl<Inner> markers::CollectionPage for ApObject<Inner> where Inner: markers::CollectionPage {}
|
||||
|
||||
impl<Kind> Extends<Kind> for Collection<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for Collection<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -1235,10 +1232,7 @@ impl<Kind> TryFrom<Object<Kind>> for Collection<Kind> {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for CollectionPage<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for CollectionPage<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
|
|
@ -590,10 +590,7 @@ impl<Kind> Link<Kind> {
|
|||
impl<Kind> markers::Base for Link<Kind> {}
|
||||
impl<Kind> markers::Link for Link<Kind> {}
|
||||
|
||||
impl<Kind> Extends<Kind> for Link<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for Link<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
|
|
@ -4724,10 +4724,7 @@ impl<Kind> Object<Kind> {
|
|||
Object::builder().inner(Base::new()).build()
|
||||
}
|
||||
|
||||
fn extending(mut base: Base<Kind>) -> Result<Self, serde_json::Error>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned,
|
||||
{
|
||||
fn extending(mut base: Base<Kind>) -> Result<Self, serde_json::Error> {
|
||||
Ok(Object {
|
||||
attachment: base.remove("attachment")?,
|
||||
attributed_to: base.remove("attributedTo")?,
|
||||
|
@ -4755,10 +4752,7 @@ impl<Kind> Object<Kind> {
|
|||
})
|
||||
}
|
||||
|
||||
fn retracting(self) -> Result<Base<Kind>, serde_json::Error>
|
||||
where
|
||||
Kind: serde::ser::Serialize,
|
||||
{
|
||||
fn retracting(self) -> Result<Base<Kind>, serde_json::Error> {
|
||||
let Object {
|
||||
attachment,
|
||||
attributed_to,
|
||||
|
@ -5031,10 +5025,7 @@ impl Tombstone {
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> Extends<Kind> for Object<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> Extends<Kind> for Object<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn extends(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -5046,10 +5037,7 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> TryFrom<Base<Kind>> for Object<Kind>
|
||||
where
|
||||
Kind: serde::de::DeserializeOwned,
|
||||
{
|
||||
impl<Kind> TryFrom<Base<Kind>> for Object<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn try_from(base: Base<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -5057,10 +5045,7 @@ where
|
|||
}
|
||||
}
|
||||
|
||||
impl<Kind> TryFrom<Object<Kind>> for Base<Kind>
|
||||
where
|
||||
Kind: serde::ser::Serialize,
|
||||
{
|
||||
impl<Kind> TryFrom<Object<Kind>> for Base<Kind> {
|
||||
type Error = serde_json::Error;
|
||||
|
||||
fn try_from(object: Object<Kind>) -> Result<Self, Self::Error> {
|
||||
|
@ -5071,7 +5056,6 @@ where
|
|||
impl<Inner, Kind> Extends<Kind> for ApObject<Inner>
|
||||
where
|
||||
Inner: Extends<Kind, Error = serde_json::Error> + UnparsedMut + markers::Object,
|
||||
Kind: serde::de::DeserializeOwned + serde::ser::Serialize,
|
||||
{
|
||||
type Error = serde_json::Error;
|
||||
|
||||
|
|
Loading…
Reference in a new issue