func getLinkRel(header string, prefix string, rel string) *string { links := linkheader.Parse(header) re := regexp.MustCompile(prefix + "-[^/]+") for _, link := range links { id := re.FindString(link.URL) if id != "" && link.Rel == rel { return &id } } return nil }
// Do exectes an API request with the specified parameters. func (c *Client) Do(method string, path string, body interface{}, response interface{}) (string, error) { r := c.RestyClient.R(). SetError(&ErrorResponse{}) if body != nil { r = r.SetBody(body) } if response != nil { r = r.SetResult(response) } apiResponse, err := r.Execute(method, path) if err != nil { return "", err } nextPath := "" header := apiResponse.Header().Get("Link") if header != "" { links := linkheader.Parse(header) for _, link := range links.FilterByRel("next") { nextPath = link.URL break } } statusClass := apiResponse.StatusCode() / 100 % 10 if statusClass == 2 { return nextPath, nil } rawError := apiResponse.Error() if rawError != nil { apiError := rawError.(*ErrorResponse) if apiError.Detail != nil { return "", apiError } } return "", fmt.Errorf("Unexpected status %v returned from API", apiResponse.StatusCode()) }