Spaces:
Paused
Paused
| package httpclient | |
| import ( | |
| "encoding/json" | |
| "net/http" | |
| ) | |
| // RequestBuilder helps build Request. | |
| type RequestBuilder struct { | |
| request *Request | |
| } | |
| // NewRequestBuilder creates a new request builder. | |
| func NewRequestBuilder() *RequestBuilder { | |
| return &RequestBuilder{ | |
| request: &Request{ | |
| Method: "POST", | |
| Headers: make(http.Header), | |
| }, | |
| } | |
| } | |
| // WithMethod sets the HTTP method. | |
| func (rb *RequestBuilder) WithMethod(method string) *RequestBuilder { | |
| rb.request.Method = method | |
| return rb | |
| } | |
| // WithURL sets the request URL. | |
| func (rb *RequestBuilder) WithURL(url string) *RequestBuilder { | |
| rb.request.URL = url | |
| return rb | |
| } | |
| // WithHeader adds a header. | |
| func (rb *RequestBuilder) WithHeader(key, value string) *RequestBuilder { | |
| rb.request.Headers.Set(key, value) | |
| return rb | |
| } | |
| // WithHeaders sets multiple headers. | |
| func (rb *RequestBuilder) WithHeaders(headers map[string]string) *RequestBuilder { | |
| for k, v := range headers { | |
| rb.request.Headers.Set(k, v) | |
| } | |
| return rb | |
| } | |
| // WithBody sets the request body. | |
| func (rb *RequestBuilder) WithBody(body any) *RequestBuilder { | |
| switch v := body.(type) { | |
| case []byte: | |
| rb.request.Body = v | |
| case string: | |
| rb.request.Body = []byte(v) | |
| default: | |
| b, err := json.Marshal(v) | |
| if err != nil { | |
| panic(err) | |
| } | |
| rb.request.Body = b | |
| } | |
| return rb | |
| } | |
| // WithAuth sets authentication. | |
| func (rb *RequestBuilder) WithAuth(auth *AuthConfig) *RequestBuilder { | |
| rb.request.Auth = auth | |
| return rb | |
| } | |
| // WithBearerToken sets bearer token authentication. | |
| func (rb *RequestBuilder) WithBearerToken(token string) *RequestBuilder { | |
| rb.request.Auth = &AuthConfig{ | |
| Type: "bearer", | |
| APIKey: token, | |
| } | |
| return rb | |
| } | |
| // WithAPIKey sets API key authentication. | |
| func (rb *RequestBuilder) WithAPIKey(apiKey string) *RequestBuilder { | |
| rb.request.Auth = &AuthConfig{ | |
| Type: "api_key", | |
| HeaderKey: apiKey, | |
| } | |
| return rb | |
| } | |
| // WithRequestID sets the request ID. | |
| func (rb *RequestBuilder) WithRequestID(requestID string) *RequestBuilder { | |
| rb.request.RequestID = requestID | |
| return rb | |
| } | |
| // Build returns the built request. | |
| func (rb *RequestBuilder) Build() *Request { | |
| return rb.request | |
| } | |