axonhub / llm /httpclient /builder.go
llzai's picture
Upload 1793 files
9853396 verified
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
}