]> Untitled Git - lemmy.git/blob - crates/apub/src/activities/voting/undo_dislike.rs
Merge pull request #1677 from LemmyNet/remove-fat-deps
[lemmy.git] / crates / apub / src / activities / voting / undo_dislike.rs
1 use crate::activities::{
2   verify_activity,
3   verify_person_in_community,
4   voting::{dislike::DislikePostOrComment, receive_undo_like_or_dislike},
5 };
6 use activitystreams::activity::kind::UndoType;
7 use lemmy_apub_lib::{values::PublicUrl, verify_urls_match, ActivityCommonFields, ActivityHandler};
8 use lemmy_utils::LemmyError;
9 use lemmy_websocket::LemmyContext;
10 use url::Url;
11
12 #[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
13 #[serde(rename_all = "camelCase")]
14 pub struct UndoDislikePostOrComment {
15   to: PublicUrl,
16   object: DislikePostOrComment,
17   cc: [Url; 1],
18   #[serde(rename = "type")]
19   kind: UndoType,
20   #[serde(flatten)]
21   common: ActivityCommonFields,
22 }
23
24 #[async_trait::async_trait(?Send)]
25 impl ActivityHandler for UndoDislikePostOrComment {
26   async fn verify(
27     &self,
28     context: &LemmyContext,
29     request_counter: &mut i32,
30   ) -> Result<(), LemmyError> {
31     verify_activity(self.common())?;
32     verify_person_in_community(&self.common.actor, &self.cc[0], context, request_counter).await?;
33     verify_urls_match(&self.common.actor, &self.object.common().actor)?;
34     self.object.verify(context, request_counter).await?;
35     Ok(())
36   }
37
38   async fn receive(
39     &self,
40     context: &LemmyContext,
41     request_counter: &mut i32,
42   ) -> Result<(), LemmyError> {
43     receive_undo_like_or_dislike(
44       &self.common.actor,
45       &self.object.object,
46       context,
47       request_counter,
48     )
49     .await
50   }
51
52   fn common(&self) -> &ActivityCommonFields {
53     &self.common
54   }
55 }