-
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
-
45
-
46
-
47
-
48
-
49
-
50
-
51
-
52
-
53
-
54
-
55
-
56
-
57
-
58
-
59
-
60
-
61
-
62
-
63
-
64
-
65
-
66
-
67
-
68
-
69
-
70
-
71
-
72
-
73
-
74
-
75
-
76
-
77
-
78
-
79
-
80
-
81
-
82
package activitypub
import (
"errors"
"github.com/buger/jsonparser"
as "github.com/go-ap/activitystreams"
)
// Source is intended to convey some sort of source from which the content markup was derived,
// as a form of provenance, or to support future editing by clients.
type Source struct {
// Content
Content as.NaturalLanguageValues `jsonld:"content"`
// MediaType
MediaType as.MimeType `jsonld:"mediaType"`
}
type Parent = Object
// Object
type Object struct {
as.Parent
// This is a list of all Like activities with this object as the object property, added as a side effect.
// The likes collection MUST be either an OrderedCollection or a Collection and MAY be filtered on privileges
// of an authenticated user or as appropriate when no authentication is given.
Likes as.Item `jsonld:"likes,omitempty"`
// This is a list of all Announce activities with this object as the object property, added as a side effect.
// The shares collection MUST be either an OrderedCollection or a Collection and MAY be filtered on privileges
// of an authenticated user or as appropriate when no authentication is given.
Shares as.Item `jsonld:"shares,omitempty"`
// Source property is intended to convey some sort of source from which the content markup was derived,
// as a form of provenance, or to support future editing by clients.
// In general, clients do the conversion from source to content, not the other way around.
Source Source `jsonld:"source,omitempty"`
}
// GetAPSource
func GetAPSource(data []byte) Source {
s := Source{}
if contBytes, _, _, err := jsonparser.Get(data, "source", "content"); err == nil {
s.Content.UnmarshalJSON(contBytes)
}
if mimeBytes, _, _, err := jsonparser.Get(data, "source", "mediaType"); err == nil {
s.MediaType.UnmarshalJSON(mimeBytes)
}
return s
}
// UnmarshalJSON
func (s *Source) UnmarshalJSON(data []byte) error {
*s = GetAPSource(data)
return nil
}
// UnmarshalJSON
func (o *Object) UnmarshalJSON(data []byte) error {
if as.ItemTyperFunc == nil {
as.ItemTyperFunc = JSONGetItemByType
}
o.Parent.UnmarshalJSON(data)
o.Likes = as.JSONGetItem(data, "likes")
o.Shares = as.JSONGetItem(data, "shares")
o.Source = GetAPSource(data)
return nil
}
// ToObject
func ToObject(it as.Item) (*Object, error) {
switch i := it.(type) {
case *as.Object:
return &Object{Parent: *i}, nil
case as.Object:
return &Object{Parent: i}, nil
case *Object:
return i, nil
case Object:
return &i, nil
}
return nil, errors.New("unable to convert object")
}