mirror of
https://github.com/songquanpeng/one-api.git
synced 2025-09-29 22:56:39 +08:00
* ♻️ refactor: move file directory * ♻️ refactor: move file directory * ♻️ refactor: support multiple config methods * 🔥 del: remove unused code * 💩 refactor: Refactor channel management and synchronization * 💄 improve: add channel website * ✨ feat: allow recording 0 consumption
53 lines
949 B
Go
53 lines
949 B
Go
package requester
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
type RequestBuilder interface {
|
|
Build(ctx context.Context, method, url string, body any, header http.Header) (*http.Request, error)
|
|
}
|
|
|
|
type HTTPRequestBuilder struct {
|
|
marshaller Marshaller
|
|
}
|
|
|
|
func NewRequestBuilder() *HTTPRequestBuilder {
|
|
return &HTTPRequestBuilder{
|
|
marshaller: &JSONMarshaller{},
|
|
}
|
|
}
|
|
|
|
func (b *HTTPRequestBuilder) Build(
|
|
ctx context.Context,
|
|
method string,
|
|
url string,
|
|
body any,
|
|
header http.Header,
|
|
) (req *http.Request, err error) {
|
|
var bodyReader io.Reader
|
|
if body != nil {
|
|
if v, ok := body.(io.Reader); ok {
|
|
bodyReader = v
|
|
} else {
|
|
var reqBytes []byte
|
|
reqBytes, err = b.marshaller.Marshal(body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
bodyReader = bytes.NewBuffer(reqBytes)
|
|
}
|
|
}
|
|
req, err = http.NewRequestWithContext(ctx, method, url, bodyReader)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if header != nil {
|
|
req.Header = header
|
|
}
|
|
return
|
|
}
|