code: func (c *Client) Do(req *http.Request, obj interface{}) (*http.Response, error) {
  	if c.Debug {
  		log.Printf("Executing request (%v): %#v", req.URL, req)
  	}
  
  	resp, err := c.httpClient.Do(req)
  	if err != nil {
  		return nil, err
  	}
  	defer resp.Body.Close()
  
  	if c.Debug {
  		log.Printf("Response received: %#v", resp)
  	}
  
  	err = CheckResponse(resp)
  	if err != nil {
  		return resp, err
  	}
  
  	// If obj implements the io.Writer,
  	// the response body is decoded into v.
  	if obj != nil {
  		if w, ok := obj.(io.Writer); ok {
  			_, err = io.Copy(w, resp.Body)
  		} else {
  			err = json.NewDecoder(resp.Body).Decode(obj)
  		}
  	}
  
  	return resp, err
  }
docs: // Do sends an API request and returns the API response.
  //
  // The API response is JSON decoded and stored in the value pointed by obj,
  // or returned as an error if an API error has occurred.
  // If obj implements the io.Writer interface, the raw response body will be written to obj,
  // without attempting to decode it.