From e49bff1dfb920528ca9662dfc3465e6f683fe3a6 Mon Sep 17 00:00:00 2001 From: Felix Ableitner Date: Thu, 2 Oct 2025 11:22:51 +0200 Subject: [PATCH] Return deleted object on resolve --- src/actix_web/inbox.rs | 6 +++--- src/actix_web/mod.rs | 2 +- src/axum/inbox.rs | 2 +- src/fetch/object_id.rs | 5 +++-- src/fetch/webfinger.rs | 2 +- src/http_signatures.rs | 2 +- src/lib.rs | 2 +- src/protocol/verification.rs | 2 +- src/traits/either.rs | 10 +++++----- src/traits/mod.rs | 2 +- 10 files changed, 18 insertions(+), 17 deletions(-) diff --git a/src/actix_web/inbox.rs b/src/actix_web/inbox.rs index d14983c..6869b35 100644 --- a/src/actix_web/inbox.rs +++ b/src/actix_web/inbox.rs @@ -22,7 +22,7 @@ pub async fn receive_activity( ) -> Result::Error> where A: Activity + DeserializeOwned + Send + 'static, - ActorT: Object + Actor + Send + 'static, + ActorT: Object + Actor + Send + Sync + 'static, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + From<::Error>, ::Error: From, @@ -62,7 +62,7 @@ pub async fn receive_activity_with_hook( ) -> Result::Error> where A: Activity + DeserializeOwned + Send + Clone + 'static, - ActorT: Object + Actor + Send + Clone + 'static, + ActorT: Object + Actor + Send + Sync + Clone + 'static, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + From<::Error>, ::Error: From, @@ -82,7 +82,7 @@ async fn do_stuff( ) -> Result<(A, ActorT), ::Error> where A: Activity + DeserializeOwned + Send + 'static, - ActorT: Object + Actor + Send + 'static, + ActorT: Object + Actor + Send + Sync + 'static, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + From<::Error>, ::Error: From, diff --git a/src/actix_web/mod.rs b/src/actix_web/mod.rs index 6b7430e..68b93f7 100644 --- a/src/actix_web/mod.rs +++ b/src/actix_web/mod.rs @@ -23,7 +23,7 @@ pub async fn signing_actor( data: &Data<::DataType>, ) -> Result::Error> where - A: Object + Actor, + A: Object + Actor + Send + Sync, ::Error: From, for<'de2> ::Kind: Deserialize<'de2>, { diff --git a/src/axum/inbox.rs b/src/axum/inbox.rs index 5b49791..c2fe5b8 100644 --- a/src/axum/inbox.rs +++ b/src/axum/inbox.rs @@ -26,7 +26,7 @@ pub async fn receive_activity( ) -> Result<(), ::Error> where A: Activity + DeserializeOwned + Send + 'static, - ActorT: Object + Actor + Send + 'static, + ActorT: Object + Actor + Send + Sync + 'static, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + From<::Error>, ::Error: From, diff --git a/src/fetch/object_id.rs b/src/fetch/object_id.rs index e702972..da928f0 100644 --- a/src/fetch/object_id.rs +++ b/src/fetch/object_id.rs @@ -10,7 +10,7 @@ use url::Url; impl FromStr for ObjectId where - T: Object + Send + Debug + 'static, + T: Object + Send + Sync + Debug + 'static, for<'de2> ::Kind: Deserialize<'de2>, { type Err = url::ParseError; @@ -61,7 +61,7 @@ where impl ObjectId where - Kind: Object + Send + Debug + 'static, + Kind: Object + Send + Sync + Debug + 'static, for<'de2> ::Kind: Deserialize<'de2>, { /// Construct a new objectid instance @@ -164,6 +164,7 @@ where if let Err(Error::ObjectDeleted(url)) = res { if let Some(db_object) = db_object { db_object.delete(data).await?; + return Ok(db_object); } return Err(Error::ObjectDeleted(url).into()); } diff --git a/src/fetch/webfinger.rs b/src/fetch/webfinger.rs index 5abf3c9..2ad7f4b 100644 --- a/src/fetch/webfinger.rs +++ b/src/fetch/webfinger.rs @@ -45,7 +45,7 @@ pub async fn webfinger_resolve_actor( data: &Data, ) -> Result::Error> where - Kind: Object + Actor + Send + 'static + Object, + Kind: Object + Actor + Send + Sync + 'static + Object, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + Send + Sync + Display, { diff --git a/src/http_signatures.rs b/src/http_signatures.rs index aafce93..01d1aa4 100644 --- a/src/http_signatures.rs +++ b/src/http_signatures.rs @@ -149,7 +149,7 @@ pub(crate) async fn signing_actor<'a, A, H>( data: &Data<::DataType>, ) -> Result::Error> where - A: Object + Actor, + A: Object + Actor + Send + Sync, ::Error: From, for<'de2> ::Kind: Deserialize<'de2>, H: IntoIterator, diff --git a/src/lib.rs b/src/lib.rs index 6dec179..ba8923a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -46,7 +46,7 @@ async fn parse_received_activity( ) -> Result<(A, ActorT), ::Error> where A: Activity + DeserializeOwned + Send + 'static, - ActorT: Object + Actor + Send + 'static, + ActorT: Object + Actor + Send + Sync + 'static, for<'de2> ::Kind: serde::Deserialize<'de2>, ::Error: From + From<::Error>, ::Error: From, diff --git a/src/protocol/verification.rs b/src/protocol/verification.rs index c6c342a..7fc9dec 100644 --- a/src/protocol/verification.rs +++ b/src/protocol/verification.rs @@ -63,7 +63,7 @@ pub fn verify_is_remote_object( data: &Data<::DataType>, ) -> Result<(), Error> where - Kind: Object + Send + 'static, + Kind: Object + Send + Sync + 'static, for<'de2> ::Kind: Deserialize<'de2>, { if id.is_local(data) { diff --git a/src/traits/either.rs b/src/traits/either.rs index ba5a07c..af647d7 100644 --- a/src/traits/either.rs +++ b/src/traits/either.rs @@ -18,8 +18,8 @@ pub enum UntaggedEither { #[async_trait] impl Object for Either where - T: Object + Object + Send, - R: Object + Object + Send, + T: Object + Object + Send + Sync, + R: Object + Object + Send + Sync, ::Kind: Send + Sync, ::Kind: Send + Sync, D: Sync + Send + Clone, @@ -59,7 +59,7 @@ where Ok(None) } - async fn delete(self, data: &Data) -> Result<(), Self::Error> { + async fn delete(&self, data: &Data) -> Result<(), Self::Error> { match self { Either::Left(l) => l.delete(data).await, Either::Right(r) => r.delete(data).await, @@ -103,8 +103,8 @@ where #[async_trait] impl Actor for Either where - T: Actor + Object + Object + Send + 'static, - R: Actor + Object + Object + Send + 'static, + T: Actor + Object + Object + Send + Sync + 'static, + R: Actor + Object + Object + Send + Sync + 'static, ::Kind: Send + Sync, ::Kind: Send + Sync, D: Sync + Send + Clone, diff --git a/src/traits/mod.rs b/src/traits/mod.rs index 030a3ee..7262836 100644 --- a/src/traits/mod.rs +++ b/src/traits/mod.rs @@ -136,7 +136,7 @@ pub trait Object: Sized + Debug { /// Mark remote object as deleted in local database. /// /// Called when a `Delete` activity is received, or if fetch returns a `Tombstone` object. - async fn delete(self, _data: &Data) -> Result<(), Self::Error> { + async fn delete(&self, _data: &Data) -> Result<(), Self::Error> { Ok(()) }