func()

in witai.go [63:101]


func (c *Client) request(method, url string, ct string, body io.Reader) (io.ReadCloser, error) {
	req, err := http.NewRequest(method, c.APIBase+url, body)
	if err != nil {
		return nil, err
	}

	req.Header.Set("Authorization", c.headerAuth)
	req.Header.Set("Accept", c.headerAccept)
	req.Header.Set("Content-Type", ct)

	resp, err := c.httpClient.Do(req)
	if err != nil {
		return nil, err
	}

	if resp.StatusCode >= http.StatusBadRequest {
		defer resp.Body.Close()

		var e *errorResp
		decoder := json.NewDecoder(resp.Body)
		err = decoder.Decode(&e)
		if err != nil {
			return nil, fmt.Errorf("unable to decode error message: %s", err.Error())
		}

		// Wit.ai errors sometimes have "error", sometimes "body" message
		if len(e.Error) > 0 {
			return nil, fmt.Errorf("unable to make a request. error: %s", e.Error)
		}

		if len(e.Body) > 0 {
			return nil, fmt.Errorf("unable to make a request. error: %s", e.Body)
		}

		return nil, fmt.Errorf("unable to make a request. error: %v", e)
	}

	return resp.Body, nil
}