-
Notifications
You must be signed in to change notification settings - Fork 6
/
document_link.go
61 lines (55 loc) · 1.18 KB
/
document_link.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package link
import (
"fmt"
"reflect"
)
// A link to a prismic document
type DocumentLink struct {
Document struct {
Id string
Type string
Slug string
}
Url string
IsBroken bool
}
func (l *DocumentLink) Decode(enc interface{}) error {
dec, ok := enc.(map[string]interface{})
if !ok {
return fmt.Errorf("unable to decode link content : %+v is a %s, not a map", enc, reflect.TypeOf(enc))
}
if v, found := dec["document"]; found {
doc, ok := v.(map[string]interface{})
if !ok {
return fmt.Errorf("%+v is not a map", v)
}
if v, found := doc["id"]; found {
l.Document.Id = v.(string)
}
if v, found := doc["type"]; found {
l.Document.Type = v.(string)
}
if v, found := doc["slug"]; found {
l.Document.Slug = v.(string)
}
}
if v, found := dec["isBroken"]; found {
l.IsBroken = v.(bool)
}
return nil
}
func (l *DocumentLink) GetUrl() string {
if l.Url == "" {
panic("url with no link - link might have not been resolved")
}
return l.Url
}
func (l *DocumentLink) GetText() string {
if l.Url == "" {
panic("url with no link - link might have not been resolved")
}
return l.Url
}
func (l *DocumentLink) Resolve(r Resolver) {
l.Url = r(l)
}