435c0d9fc8
This PR switches the Nomad repository from using govendor to Go modules for managing dependencies. Aspects of the Nomad workflow remain pretty much the same. The usual Makefile targets should continue to work as they always did. The API submodule simply defers to the parent Nomad version on the repository, keeping the semantics of API versioning that currently exists.
97 lines
2.4 KiB
Go
97 lines
2.4 KiB
Go
// +build go1.7 go1.8
|
|
|
|
// Copyright (c) 2015-2019 Jeevanandam M (jeeva@myjeeva.com)
|
|
// 2016 Andrew Grigorev (https://github.com/ei-grad)
|
|
// All rights reserved.
|
|
// resty source code and usage is governed by a MIT style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package resty
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"encoding/json"
|
|
"net/http"
|
|
"net/url"
|
|
"time"
|
|
)
|
|
|
|
// Request type is used to compose and send individual request from client
|
|
// go-resty is provide option override client level settings such as
|
|
// Auth Token, Basic Auth credentials, Header, Query Param, Form Data, Error object
|
|
// and also you can add more options for that particular request
|
|
type Request struct {
|
|
URL string
|
|
Method string
|
|
Token string
|
|
QueryParam url.Values
|
|
FormData url.Values
|
|
Header http.Header
|
|
Time time.Time
|
|
Body interface{}
|
|
Result interface{}
|
|
Error interface{}
|
|
RawRequest *http.Request
|
|
SRV *SRVRecord
|
|
UserInfo *User
|
|
|
|
isMultiPart bool
|
|
isFormData bool
|
|
setContentLength bool
|
|
isSaveResponse bool
|
|
notParseResponse bool
|
|
jsonEscapeHTML bool
|
|
outputFile string
|
|
fallbackContentType string
|
|
ctx context.Context
|
|
pathParams map[string]string
|
|
client *Client
|
|
bodyBuf *bytes.Buffer
|
|
multipartFiles []*File
|
|
multipartFields []*MultipartField
|
|
}
|
|
|
|
// Context method returns the Context if its already set in request
|
|
// otherwise it creates new one using `context.Background()`.
|
|
func (r *Request) Context() context.Context {
|
|
if r.ctx == nil {
|
|
return context.Background()
|
|
}
|
|
return r.ctx
|
|
}
|
|
|
|
// SetContext method sets the context.Context for current Request. It allows
|
|
// to interrupt the request execution if ctx.Done() channel is closed.
|
|
// See https://blog.golang.org/context article and the "context" package
|
|
// documentation.
|
|
func (r *Request) SetContext(ctx context.Context) *Request {
|
|
r.ctx = ctx
|
|
return r
|
|
}
|
|
|
|
func (r *Request) addContextIfAvailable() {
|
|
if r.ctx != nil {
|
|
r.RawRequest = r.RawRequest.WithContext(r.ctx)
|
|
}
|
|
}
|
|
|
|
func (r *Request) isContextCancelledIfAvailable() bool {
|
|
if r.ctx != nil {
|
|
if r.ctx.Err() != nil {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// for go1.7+
|
|
var noescapeJSONMarshal = func(v interface{}) ([]byte, error) {
|
|
buf := acquireBuffer()
|
|
defer releaseBuffer(buf)
|
|
encoder := json.NewEncoder(buf)
|
|
encoder.SetEscapeHTML(false)
|
|
err := encoder.Encode(v)
|
|
return buf.Bytes(), err
|
|
}
|