common/httpbase/request.go (35 lines of code) (raw):

package httpbase import ( "crypto/tls" "net/http" "time" "github.com/kirinlabs/HttpRequest" ) type RequestOption func (request *HttpRequest.Request) func WithHeaders(headers map[string]string) RequestOption { return func(request *HttpRequest.Request) { request.SetHeaders(headers) } } func WithTimeoutInSeconds(timeoutInSeconds int) RequestOption { return func(request *HttpRequest.Request) { // IMPORTANT NOTE: Although time.Duration type is used for the argument // of (*HttpRequest.Request).SetTimeout(d time.Duration), the actual // unit is not nanosecond but second, since the value would be // internally multiplied by base. // // See link below for implementation detail: // https://github.com/kirinlabs/HttpRequest/blob/432628e833bda77cc426fc1bee9825a13f6b4df1/request.go#L105 request.SetTimeout(time.Duration(timeoutInSeconds)) } } func WithTransport(transport *http.Transport) RequestOption { return func(request *HttpRequest.Request) { request.Transport(transport) } } func WithTLSClientConfig(tlsClientConfig *tls.Config) RequestOption { return func(request *HttpRequest.Request) { request.SetTLSClient(tlsClientConfig) } } func buildRequest(options ...RequestOption) *HttpRequest.Request { request := HttpRequest.NewRequest() for _, option := range options { option(request) } return request }