Files
openrouter/internal/request_builder.go
2023-12-01 10:02:48 +08:00

40 lines
754 B
Go

package internal
import (
"bytes"
"context"
"net/http"
)
type RequestBuilder interface {
Build(ctx context.Context, method, url string, request any) (*http.Request, error)
}
type HTTPRequestBuilder struct {
marshaller Marshaller
}
func NewRequestBuilder() *HTTPRequestBuilder {
return &HTTPRequestBuilder{
marshaller: &JSONMarshaller{},
}
}
func (b *HTTPRequestBuilder) Build(ctx context.Context, method, url string, request any) (*http.Request, error) {
if request == nil {
return http.NewRequestWithContext(ctx, method, url, nil)
}
var reqBytes []byte
reqBytes, err := b.marshaller.Marshal(request)
if err != nil {
return nil, err
}
return http.NewRequestWithContext(
ctx,
method,
url,
bytes.NewBuffer(reqBytes),
)
}