forked from go-ap/activitypub
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathobject_id.go
42 lines (37 loc) · 1.24 KB
/
object_id.go
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
package activitypub
import (
"bytes"
"strings"
)
// ID designates an unique global identifier.
// All Objects in [ActivityStreams] should have unique global identifiers.
// ActivityPub extends this requirement; all objects distributed by the ActivityPub protocol MUST
// have unique global identifiers, unless they are intentionally transient
// (short lived activities that are not intended to be able to be looked up,
// such as some kinds of chat messages or game notifications).
// These identifiers must fall into one of the following groups:
//
// 1. Publicly dereferenceable URIs, such as HTTPS URIs, with their authority belonging
// to that of their originating server. (Publicly facing content SHOULD use HTTPS URIs).
// 2. An ID explicitly specified as the JSON null object, which implies an anonymous object
// (a part of its parent context)
type ID IRI
// UnmarshalJSON
func (i *ID) UnmarshalJSON(data []byte) error {
*i = ID(strings.Trim(string(data), "\""))
return nil
}
// MarshalJSON
func (i ID) MarshalJSON() ([]byte, error) {
if len(i) == 0 {
return nil, nil
}
b := bytes.Buffer{}
b.Write([]byte{'"'})
b.WriteString(string(i))
b.Write([]byte{'"'})
return b.Bytes(), nil
}
func (i *ID) IsValid() bool {
return i != nil && len(*i) > 0
}