boosty
/
call.go
37 строк · 707.0 Байт
1package boosty
2
3import (
4"encoding/json"
5"fmt"
6"net/url"
7
8"gohome.4gophers.ru/getapp/boosty/request"
9)
10
11type Method[T interface{}] struct {
12request *request.Request
13method string
14url string
15values url.Values
16}
17
18func (m *Method[T]) Call(model T) (*T, error) {
19u := m.url + m.values.Encode()
20
21resp, err := m.request.Request(m.method, u, nil)
22if err != nil {
23return nil, fmt.Errorf("error on do request: %w", err)
24}
25
26defer resp.Body.Close()
27
28if resp.StatusCode >= 400 {
29return nil, fmt.Errorf("boosty request status error")
30}
31
32if err := json.NewDecoder(resp.Body).Decode(&model); err != nil {
33return nil, fmt.Errorf("boosty request decode error: %w", err)
34}
35
36return &model, nil
37}
38