func (f *Factory) buildParams(v interface{}) (params url.Values, err error) { params = url.Values{} if v != nil && !reflect.ValueOf(v).IsNil() { if params, err = query.Values(v); err != nil { return nil, err } } params.Add("factory_id", f.ID) return params, nil }
// NewRequest generates an HTTP request, but does not perform the request. func (s *Service) NewRequest(method, path string, body interface{}, q interface{}) (*http.Request, error) { var ctype string var rbody io.Reader switch t := body.(type) { case nil: case string: rbody = bytes.NewBufferString(t) case io.Reader: rbody = t default: v := reflect.ValueOf(body) if !v.IsValid() { break } if v.Type().Kind() == reflect.Ptr { v = reflect.Indirect(v) if !v.IsValid() { break } } j, err := json.Marshal(body) if err != nil { return nil, err } rbody = bytes.NewReader(j) ctype = "application/json" } req, err := http.NewRequest(method, s.URL+path, rbody) if err != nil { return nil, err } if q != nil { v, err := query.Values(q) if err != nil { return nil, err } query := v.Encode() if req.URL.RawQuery != "" && query != "" { req.URL.RawQuery += "&" } req.URL.RawQuery += query } req.Header.Set("Accept", "application/json") req.Header.Set("User-Agent", DefaultUserAgent) if ctype != "" { req.Header.Set("Content-Type", ctype) } return req, nil }