-#[async_trait::async_trait(?Send)]
-impl ApubObject for ApubCommunityModerators {
- type DataType = CommunityContext;
- type TombstoneType = ();
- type ApubType = GroupModerators;
-
- fn last_refreshed_at(&self) -> Option<NaiveDateTime> {
- None
- }
-
- async fn read_from_apub_id(
- _object_id: Url,
- data: &Self::DataType,
- ) -> Result<Option<Self>, LemmyError> {
- // Only read from database if its a local community, otherwise fetch over http
- if data.0.local {
- let cid = data.0.id;
- let moderators = blocking(data.1.pool(), move |conn| {
- CommunityModeratorView::for_community(conn, cid)
- })
- .await??;
- Ok(Some(ApubCommunityModerators { 0: moderators }))
- } else {
- Ok(None)
- }
- }
-
- async fn delete(self, _data: &Self::DataType) -> Result<(), LemmyError> {
- unimplemented!()
- }
-
- async fn into_apub(self, data: &Self::DataType) -> Result<Self::ApubType, LemmyError> {
- let ordered_items = self
- .0
+#[async_trait::async_trait]
+impl Collection for ApubCommunityModerators {
+ type Owner = ApubCommunity;
+ type DataType = LemmyContext;
+ type Kind = GroupModerators;
+ type Error = LemmyError;
+
+ #[tracing::instrument(skip_all)]
+ async fn read_local(
+ owner: &Self::Owner,
+ data: &Data<Self::DataType>,
+ ) -> Result<Self::Kind, LemmyError> {
+ let moderators = CommunityModeratorView::for_community(&mut data.pool(), owner.id).await?;
+ let ordered_items = moderators