github.com/crosbymichael/octokat@v0.0.0-20160826194511-076a32289ed5/root.go (about) 1 package octokat 2 3 import ( 4 "encoding/json" 5 "regexp" 6 ) 7 8 type Root struct { 9 client *Client 10 links map[string]Hyperlink 11 } 12 13 func (r *Root) Rel(rel string) *Hyperlink { 14 if link, ok := r.links[rel]; ok { 15 return &link 16 } 17 18 return nil 19 } 20 21 func (r *Root) UnmarshalJSON(d []byte) error { 22 var out map[string]string 23 24 if err := json.Unmarshal(d, &out); err != nil { 25 return err 26 } 27 28 r.links = make(map[string]Hyperlink, len(out)) 29 30 for rel, link := range out { 31 rel = parseRelNameFromURL(rel) 32 r.links[rel] = Hyperlink{client: r.client, Rel: rel, Href: link} 33 } 34 35 return nil 36 } 37 38 func (c *Client) Root(options *Options) (root *Root, err error) { 39 root = &Root{} 40 root.client = c 41 err = c.jsonGet("", options, &root) 42 return 43 } 44 45 func parseRelNameFromURL(url string) string { 46 re := regexp.MustCompile("^(.+)_url") 47 if re.MatchString(url) { 48 return re.FindStringSubmatch(url)[1] 49 } 50 51 return url 52 }