code: func (r *RestClient) Do(method, path string, body, v interface{}, options ...RequestOption) error {
  	url := fmt.Sprintf("%s%s", r.Host, path)
  	options = append(r.RequestOptions, options...)
  
  	req, err := r.RequestBuilder(method, url, body, options...)
  	if err != nil {
  		return err
  	}
  
  	resp, err := r.RequestDoer.Do(req)
  	if err != nil {
  		return err
  	}
  
  	return r.ResponseReader(resp, v)
  }
docs: // Do orchestrates building, performing, and reading http requests and responses.