| package httpclient
|
|
|
| import (
|
| "encoding/json"
|
| "net/http"
|
| )
|
|
|
|
|
| type RequestBuilder struct {
|
| request *Request
|
| }
|
|
|
|
|
| func NewRequestBuilder() *RequestBuilder {
|
| return &RequestBuilder{
|
| request: &Request{
|
| Method: "POST",
|
| Headers: make(http.Header),
|
| },
|
| }
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithMethod(method string) *RequestBuilder {
|
| rb.request.Method = method
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithURL(url string) *RequestBuilder {
|
| rb.request.URL = url
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithHeader(key, value string) *RequestBuilder {
|
| rb.request.Headers.Set(key, value)
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithHeaders(headers map[string]string) *RequestBuilder {
|
| for k, v := range headers {
|
| rb.request.Headers.Set(k, v)
|
| }
|
|
|
| return rb
|
| }
|
|
|
|
|
| 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
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithAuth(auth *AuthConfig) *RequestBuilder {
|
| rb.request.Auth = auth
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithBearerToken(token string) *RequestBuilder {
|
| rb.request.Auth = &AuthConfig{
|
| Type: "bearer",
|
| APIKey: token,
|
| }
|
|
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithAPIKey(apiKey string) *RequestBuilder {
|
| rb.request.Auth = &AuthConfig{
|
| Type: "api_key",
|
| HeaderKey: apiKey,
|
| }
|
|
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) WithRequestID(requestID string) *RequestBuilder {
|
| rb.request.RequestID = requestID
|
| return rb
|
| }
|
|
|
|
|
| func (rb *RequestBuilder) Build() *Request {
|
| return rb.request
|
| }
|
|
|