func (c Client) Get() ([]byte, error) {
if c.queryParams != nil {
c.uri += "?"
for k, v := range c.queryParams {
c.uri += fmt.Sprintf("%s=%s", k, v)
}
}
request, err := http.NewRequest(http.MethodGet, c.uri, nil)
if err != nil {
return nil, err
}
if c.headers != nil {
for k, v := range c.headers {
request.Header.Add(k, v)
}
}
return c.Resp(c.sender.Do(request))
}
func (c Client) Post() ([]byte, error) {
var body []byte
var err error
if c.body != nil {
body, err = json.Marshal(c.body)
if err != nil {
return nil, errors.Join(constants.MarshalError, err)
}
}
request, err := http.NewRequest(http.MethodGet, c.uri, bytes.NewBuffer(body))
if err != nil {
return nil, err
}
if c.headers != nil {
for k, v := range c.headers {
request.Header.Add(k, v)
}
}
return c.Resp(c.sender.Do(request))
}
func (c Client) Put() ([]byte, error) {
var body []byte
var err error
if c.body != nil {
body, err = json.Marshal(c.body)
if err != nil {
return nil, errors.Join(constants.MarshalError, err)
}
}
request, err := http.NewRequest(http.MethodPut, c.uri, bytes.NewBuffer(body))
if err != nil {
return nil, err
}
if c.headers != nil {
for k, v := range c.headers {
request.Header.Add(k, v)
}
}
return c.Resp(c.sender.Do(request))
}
func (c Client) Patch() ([]byte, error) {
var body []byte
var err error
if c.body != nil {
body, err = json.Marshal(c.body)
if err != nil {
return nil, errors.Join(constants.MarshalError, err)
}
}
request, err := http.NewRequest(http.MethodPatch, c.uri, bytes.NewBuffer(body))
if err != nil {
return nil, err
}
if c.headers != nil {
for k, v := range c.headers {
request.Header.Add(k, v)
}
}
return c.Resp(c.sender.Do(request))
}
func (c Client) Delete() ([]byte, error) {
var body []byte
var err error
if c.queryParams != nil {
c.uri += "?"
for k, v := range c.queryParams {
c.uri += fmt.Sprintf("%s=%s", k, v)
}
}
request, err := http.NewRequest(http.MethodDelete, c.uri, bytes.NewBuffer(body))
if err != nil {
return nil, err
}
if c.headers != nil {
for k, v := range c.headers {
request.Header.Add(k, v)
}
}
return c.Resp(c.sender.Do(request))
}
func (c Client) Resp(resp *http.Response, err error) ([]byte, error) {
if err != nil {
return nil, err
}
body, err := io.ReadAll(resp.Body)
if err != nil {
return nil, err
}
defer func(Body io.ReadCloser) {
_ = Body.Close()
}(resp.Body)
return body, nil
}