code: func (c *Client) Do(r *http.Request, v interface{}) error {
  	var res *http.Response
  	var err error
  	if c.Client == nil {
  		res, err = defaultHttpClient.Do(r)
  	} else {
  		res, err = c.Client.Do(r)
  	}
  	if err != nil {
  		return err
  	}
  	defer res.Body.Close()
  	if res.StatusCode >= 400 {
  		if c.ErrorParser != nil {
  			return c.ErrorParser(res)
  		}
  		return DefaultErrorParser(res)
  	}
  
  	resBody, err := ioutil.ReadAll(res.Body)
  	if err != nil {
  		return err
  	}
  	if v == nil || res.StatusCode == http.StatusNoContent {
  		return nil
  	} else {
  		return json.Unmarshal(resBody, v)
  	}
  }
docs: // Do performs the HTTP request. If the HTTP response is in the 2xx range,
  // Unmarshal the response body into v. If the response status code is 400 or
  // above, attempt to Unmarshal the response into an Error. Otherwise return
  // a generic http error.