summaryrefslogtreecommitdiff
path: root/internal/ap/interfaces.go
diff options
context:
space:
mode:
authorLibravatar tobi <31960611+tsmethurst@users.noreply.github.com>2025-02-19 18:09:54 +0100
committerLibravatar GitHub <noreply@github.com>2025-02-19 18:09:54 +0100
commit96716e4f43341beb3431a7caad10d48e6ca844ae (patch)
tree49e0771a80c5ecdf2cfc42969036fa6044382209 /internal/ap/interfaces.go
parentadds more code comments and some small code formatting tweaks (#3799) (diff)
downloadgotosocial-96716e4f43341beb3431a7caad10d48e6ca844ae.tar.xz
[feature] Forward-compatibility with Approval objects (#3807)
* vendor * [feature] Forward-compatibility with Approval objects * vendor the thing * fix leetle bug * lil syntax tweak for beloved kimb
Diffstat (limited to 'internal/ap/interfaces.go')
-rw-r--r--internal/ap/interfaces.go50
1 files changed, 44 insertions, 6 deletions
diff --git a/internal/ap/interfaces.go b/internal/ap/interfaces.go
index fdd5e4a0b..acc799640 100644
--- a/internal/ap/interfaces.go
+++ b/internal/ap/interfaces.go
@@ -128,16 +128,13 @@ func ToPollOptionable(t vocab.Type) (PollOptionable, bool) {
}
// IsAccept returns whether AS vocab type name
-// is something that can be cast to Accept.
+// is something that can be cast to Acceptable.
func IsAcceptable(typeName string) bool {
return typeName == ActivityAccept
}
-// ToAcceptable safely tries to cast vocab.Type as vocab.ActivityStreamsAccept.
-//
-// TODO: Add additional "Accept" types here, eg., "ApproveReply" from
-// https://codeberg.org/fediverse/fep/src/branch/main/fep/5624/fep-5624.md
-func ToAcceptable(t vocab.Type) (vocab.ActivityStreamsAccept, bool) {
+// ToAcceptable safely tries to cast vocab.Type as Acceptable.
+func ToAcceptable(t vocab.Type) (Acceptable, bool) {
acceptable, ok := t.(vocab.ActivityStreamsAccept)
if !ok || !IsAcceptable(t.GetTypeName()) {
return nil, false
@@ -145,6 +142,28 @@ func ToAcceptable(t vocab.Type) (vocab.ActivityStreamsAccept, bool) {
return acceptable, true
}
+// IsApprovable returns whether AS vocab type name
+// is something that can be cast to Approvable.
+func IsApprovable(typeName string) bool {
+ switch typeName {
+ case ObjectLikeApproval,
+ ObjectReplyApproval,
+ ObjectAnnounceApproval:
+ return true
+ default:
+ return false
+ }
+}
+
+// ToAcceptable safely tries to cast vocab.Type as Approvable.
+func ToApprovable(t vocab.Type) (Approvable, bool) {
+ approvable, ok := t.(Approvable)
+ if !ok || !IsApprovable(t.GetTypeName()) {
+ return nil, false
+ }
+ return approvable, true
+}
+
// Activityable represents the minimum activitypub interface for representing an 'activity'.
// (see: IsActivityable() for types implementing this, though you MUST make sure to check
// the typeName as this bare interface may be implementable by non-Activityable types).
@@ -247,6 +266,19 @@ type PollOptionable interface {
// interface for representing an Accept.
type Acceptable interface {
Activityable
+
+ WithTarget
+ WithResult
+}
+
+// Approvable represents the minimum activitypub interface
+// for a LikeApproval, ReplyApproval, or AnnounceApproval.
+type Approvable interface {
+ vocab.Type
+
+ WithAttributedTo
+ WithObject
+ WithTarget
}
// Attachmentable represents the minimum activitypub interface for representing a 'mediaAttachment'. (see: IsAttachmentable).
@@ -708,3 +740,9 @@ type WithApprovedBy interface {
GetGoToSocialApprovedBy() vocab.GoToSocialApprovedByProperty
SetGoToSocialApprovedBy(vocab.GoToSocialApprovedByProperty)
}
+
+// WithVotersCount represents an activity or object the result property.
+type WithResult interface {
+ GetActivityStreamsResult() vocab.ActivityStreamsResultProperty
+ SetActivityStreamsResult(vocab.ActivityStreamsResultProperty)
+}