summaryrefslogtreecommitdiffstats
path: root/server/src/apub/mod.rs
diff options
context:
space:
mode:
authorFelix <me@nutomic.com>2020-04-28 19:46:25 +0200
committerFelix <me@nutomic.com>2020-04-28 19:46:25 +0200
commit0c0c68398609d549a757a9c3a26ce2311075fa38 (patch)
treefe2f07a1ad195bc042217538fc2b3e54e7a44124 /server/src/apub/mod.rs
parent36d0e34668b94a955306a4b83947deb1f10689f2 (diff)
Implement deleting communities
Diffstat (limited to 'server/src/apub/mod.rs')
-rw-r--r--server/src/apub/mod.rs30
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.