]> Untitled Git - lemmy.git/blob - crates/apub/src/activities/voting/dislike.rs
54b673008aa65037dad43a5609365bc8b57d0254
[lemmy.git] / crates / apub / src / activities / voting / dislike.rs
1 use crate::activities::{
2   verify_activity,
3   verify_person_in_community,
4   voting::receive_like_or_dislike,
5 };
6 use activitystreams::activity::kind::DislikeType;
7 use lemmy_apub_lib::{values::PublicUrl, 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 DislikePostOrComment {
15   to: PublicUrl,
16   pub(in crate::activities) object: Url,
17   cc: [Url; 1],
18   #[serde(rename = "type")]
19   kind: DislikeType,
20   #[serde(flatten)]
21   common: ActivityCommonFields,
22 }
23
24 #[async_trait::async_trait(?Send)]
25 impl ActivityHandler for DislikePostOrComment {
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     Ok(())
34   }
35
36   async fn receive(
37     &self,
38     context: &LemmyContext,
39     request_counter: &mut i32,
40   ) -> Result<(), LemmyError> {
41     receive_like_or_dislike(
42       -1,
43       &self.common.actor,
44       &self.object,
45       context,
46       request_counter,
47     )
48     .await
49   }
50
51   fn common(&self) -> &ActivityCommonFields {
52     &self.common
53   }
54 }