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  }