package api import ( "bytes" "encoding/json" "net/http" ) type HttpClient struct { userAgent string } func NewHttpClient() *HttpClient { return &HttpClient{userAgent: "internal-http-client"} } func (c *HttpClient) SendGet(api, url string, data, out any) error { res, err := c.sendRequest(api, url, http.MethodGet, data) if err != nil { return err } decoder := json.NewDecoder(res.Body) err = decoder.Decode(&out) if err != nil { return err } return nil } func (c *HttpClient) SendPost(api, url string, data, out any) (any, error) { res, err := c.sendRequest(api, url, http.MethodPost, data) if err != nil { return nil, err } decoder := json.NewDecoder(res.Body) err = decoder.Decode(out) if err != nil { return nil, err } return out, nil } func (c *HttpClient) sendRequest(api, url, method string, data any) (*http.Response, error) { apiUrl := api + url // FIXME client := &http.Client{} json, err := json.Marshal(&data) if err != nil { return nil, err } req, err := http.NewRequest(method, apiUrl, bytes.NewBuffer(json)) if err != nil { return nil, err } req.Header.Set("Content-Type", "application/json") req.Header.Set("User-Agent", c.ua) res, err := client.Do(req) if err != nil { return nil, err } // defer res.Body.Close() return res, nil }