51 lines
876 B
Go
51 lines
876 B
Go
package common
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"net/http"
|
|
)
|
|
|
|
type RequestBuilder interface {
|
|
Build(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(
|
|
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.NewRequest(method, url, bodyReader)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if header != nil {
|
|
req.Header = header
|
|
}
|
|
return
|
|
}
|