package tools import ( "bytes" "encoding/json" "io" "net/http" ) type METHOD int const ( GET METHOD = iota PUT POST DELETE ) func (m METHOD) String() string { return [...]string{"GET", "PUT", "POST", "DELETE"}[m] } func (m METHOD) EnumIndex() int { return int(m) } func ToMethod(str string) METHOD { for _, s := range []METHOD{GET, PUT, POST, DELETE} { if s.String() == str { return s } } return GET } var HTTPCallerInstance = &HTTPCaller{} type HTTPCaller struct { URLS map[string]map[METHOD]string } func NewHTTPCaller(urls map[string]map[METHOD]string) *HTTPCaller { return &HTTPCaller{ URLS: urls, } } func (caller *HTTPCaller) CallGet(url string, subpath string) ([]byte, error) { resp, err := http.Get(url + subpath) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) } func (caller *HTTPCaller) CallDelete(url string, subpath string) ([]byte, error) { resp, err := http.NewRequest("DELETE", url+subpath, nil) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) } func (caller *HTTPCaller) CallPost(url string, subpath string, body map[string]interface{}) ([]byte, error) { postBody, _ := json.Marshal(body) responseBody := bytes.NewBuffer(postBody) resp, err := http.Post(url+subpath, "application/json", responseBody) if err != nil { return nil, err } defer resp.Body.Close() return io.ReadAll(resp.Body) }