-
1
-
2
-
3
-
4
-
5
-
6
-
7
-
8
-
9
-
10
-
11
-
12
-
13
-
14
-
15
-
16
-
17
-
18
-
19
-
20
-
21
-
22
-
23
-
24
-
25
-
26
-
27
-
28
-
29
-
30
-
31
-
32
-
33
-
34
-
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
44
package activitypub
import (
"errors"
"fmt"
"github.com/go-ap/activitystreams"
)
type withObjectFn func (*activitystreams.Object) error
type withActivityFn func (*activitystreams.Activity) error
type withPersonFn func (*Person) error
func OnObject(it activitystreams.Item, fn withObjectFn) error {
if !activitystreams.ObjectTypes.Contains(it.GetType()) {
return errors.New(fmt.Sprintf("%T[%s] can't be converted to Object", it, it.GetType()))
}
ob, err := activitystreams.ToObject(it)
if err != nil {
return err
}
return fn(ob)
}
func OnActivity(it activitystreams.Item, fn withActivityFn) error {
if !activitystreams.ActivityTypes.Contains(it.GetType()) {
return errors.New(fmt.Sprintf("%T[%s] can't be converted to Activity", it, it.GetType()))
}
act, err := activitystreams.ToActivity(it)
if err != nil {
return err
}
return fn(act)
}
func OnPerson(it activitystreams.Item, fn withPersonFn) error {
if !activitystreams.ActorTypes.Contains(it.GetType()) {
return errors.New(fmt.Sprintf("%T[%s] can't be converted to Person", it, it.GetType()))
}
pers, err := ToPerson(it)
if err != nil {
return err
}
return fn(pers)
}