package http import ( "io" "net/http" "net/url" "github.com/pkg/errors" ) const ( SchemeHTTP = "http" SchemeHTTPS = "https" ) type LoaderHandler struct { client *http.Client } func (h *LoaderHandler) Match(url *url.URL) bool { return url.Scheme == SchemeHTTP || url.Scheme == SchemeHTTPS } func (h *LoaderHandler) Open(url *url.URL) (io.ReadCloser, error) { res, err := h.client.Get(url.String()) if err != nil { return nil, errors.WithStack(err) } if res.StatusCode != http.StatusOK { return nil, errors.Errorf("unexpected status code '%d (%s)'", res.StatusCode, http.StatusText(res.StatusCode)) } return res.Body, nil } func NewLoaderHandler(client *http.Client) *LoaderHandler { return &LoaderHandler{client} }