Files
go-openai/internal/request_builder.go
渡邉祐一 / Yuichi Watanabe 61ba5f3369 move request_builder into internal pkg (#304) (#329)
* move request_builder into internal pkg (#304)

* add some test for internal.RequestBuilder

* add a test for openai.GetEngine
2023-05-31 12:01:42 +04:00

41 lines
753 B
Go

package openai
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),
)
}