-#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
-#[serde(rename_all = "camelCase")]
-pub struct AcceptFollowCommunity {
- to: Url,
- object: FollowCommunity,
- #[serde(rename = "type")]
- kind: AcceptType,
- #[serde(flatten)]
- common: ActivityCommonFields,
+impl AcceptFollow {
+ #[tracing::instrument(skip_all)]
+ pub async fn send(follow: Follow, context: &Data<LemmyContext>) -> Result<(), LemmyError> {
+ let user_or_community = follow.object.dereference_local(context).await?;
+ let person = follow.actor.clone().dereference(context).await?;
+ let accept = AcceptFollow {
+ actor: user_or_community.id().into(),
+ to: Some([person.id().into()]),
+ object: follow,
+ kind: AcceptType::Accept,
+ id: generate_activity_id(
+ AcceptType::Accept,
+ &context.settings().get_protocol_and_hostname(),
+ )?,
+ };
+ let inbox = vec![person.shared_inbox_or_inbox()];
+ send_lemmy_activity(context, accept, &user_or_community, inbox, true).await
+ }