From 8dd60f886221c68fdabfeb42ad2f7e062d567ee1 Mon Sep 17 00:00:00 2001 From: Jason Hall Date: Fri, 25 Apr 2014 22:51:41 -0400 Subject: [PATCH] refactor fetching --- marvel.go | 37 ++++++++++++++++++++----------------- 1 file changed, 20 insertions(+), 17 deletions(-) diff --git a/marvel.go b/marvel.go index 810546d..3f9320c 100644 --- a/marvel.go +++ b/marvel.go @@ -62,7 +62,7 @@ type commonList struct { Count int `json:"count"` } -func (c Client) Series(id int64) (r struct { +func (c Client) Series(id int64) (resp struct { commonResponse Data struct { commonList @@ -74,23 +74,26 @@ func (c Client) Series(id int64) (r struct { }, err error) { u := c.baseURL() u.Path += fmt.Sprintf("series/%d/comics", id) - - resp, herr := http.Get(u.String()) - if herr != nil { - err = herr + r, err := c.fetch(u) + if err != nil { return } - defer resp.Body.Close() - if resp.StatusCode >= http.StatusBadRequest { - slurp, rerr := ioutil.ReadAll(resp.Body) - if rerr != nil { - err = rerr - return - } - err = fmt.Errorf("error response from API: %d\n%s", resp.StatusCode, slurp) - return - } - - err = json.NewDecoder(resp.Body).Decode(&r) + defer r.Close() + err = json.NewDecoder(r).Decode(&resp) return } + +func (c Client) fetch(u url.URL) (io.ReadCloser, error) { + resp, err := http.Get(u.String()) + if err != nil { + return nil, err + } + if resp.StatusCode >= http.StatusBadRequest { + slurp, err := ioutil.ReadAll(resp.Body) + if err != nil { + return nil, err + } + return nil, fmt.Errorf("error response from API: %d\n%s", resp.StatusCode, slurp) + } + return resp.Body, nil +}