diff options
author | Felix <me@nutomic.com> | 2020-04-28 19:46:25 +0200 |
---|---|---|
committer | Felix <me@nutomic.com> | 2020-04-28 19:46:25 +0200 |
commit | 0c0c68398609d549a757a9c3a26ce2311075fa38 (patch) | |
tree | fe2f07a1ad195bc042217538fc2b3e54e7a44124 /server/src/apub/mod.rs | |
parent | 36d0e34668b94a955306a4b83947deb1f10689f2 (diff) |
Implement deleting communities
Diffstat (limited to 'server/src/apub/mod.rs')
-rw-r--r-- | server/src/apub/mod.rs | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/server/src/apub/mod.rs b/server/src/apub/mod.rs index 4b08c53a..9232c2d7 100644 --- a/server/src/apub/mod.rs +++ b/server/src/apub/mod.rs @@ -10,13 +10,13 @@ pub mod user; pub mod user_inbox; use activitystreams::{ - activity::{Accept, Create, Dislike, Follow, Like, Update}, + activity::{Accept, Create, Delete, Dislike, Follow, Like, Update}, actor::{properties::ApActorProperties, Actor, Group, Person}, collection::UnorderedCollection, context, endpoint::EndpointProperties, ext::{Ext, Extensible, Extension}, - object::{properties::ObjectProperties, Note, Page}, + object::{properties::ObjectProperties, Note, Page, Tombstone}, public, BaseBox, }; use actix_web::body::Body; @@ -138,10 +138,31 @@ fn is_apub_id_valid(apub_id: &Url) -> bool { } } +#[derive(Serialize)] +pub enum ResponseOrTombstone<Response> { + Response(Response), + Tombstone(Box<Tombstone>), +} + +impl<Response> ResponseOrTombstone<Response> { + fn as_response(&self) -> Result<&Response, Error> { + match self { + ResponseOrTombstone::Response(r) => Ok(r), + ResponseOrTombstone::Tombstone(_t) => Err(format_err!("Value is a tombstone")), + } + } + fn as_tombstone(&self) -> Result<&Tombstone, Error> { + match self { + ResponseOrTombstone::Tombstone(t) => Ok(t), + ResponseOrTombstone::Response(_r) => Err(format_err!("Value is a response")), + } + } +} + // TODO Not sure good names for these pub trait ToApub { type Response; - fn to_apub(&self, conn: &PgConnection) -> Result<Self::Response, Error>; + fn to_apub(&self, conn: &PgConnection) -> Result<ResponseOrTombstone<Self::Response>, Error>; } pub trait FromApub { @@ -154,6 +175,7 @@ pub trait FromApub { pub trait ApubObjectType { fn send_create(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error>; fn send_update(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error>; + //fn send_delete(&self, creator: &User_, conn: &PgConnection) -> Result<(), Error>; } pub trait ApubLikeableType { @@ -192,6 +214,8 @@ pub trait ActorType { Err(format_err!("Accept not implemented.")) } + fn send_delete(&self, conn: &PgConnection) -> Result<(), Error>; + // TODO default because there is no user following yet. #[allow(unused_variables)] /// For a given community, returns the inboxes of all followers. |