package response import ( "bytes" "fmt" "io" "net/http" "ruben/inventory2/internal/server/redirect" ) type ( htmlRes struct { body []byte res Response } ) var _ Response = htmlRes{} func HTML(body []byte) Response { return htmlRes{ body: body, } } func (h htmlRes) String() string { if h.res != nil { return fmt.Sprintf(`{"body": %q, "nested": %s}`, string(h.body), h.res) } return fmt.Sprintf(`{"body": %q}`, h.body) } func (h htmlRes) wrap(res Response) Response { h.res = res return h } func (h htmlRes) Status(code int) Response { return Status(code).wrap(h) } func (h htmlRes) Redirect(code redirect.Code, to string) Response { return Redirect(code, to).wrap(h) } func (h htmlRes) HTML(body []byte) Response { h.body = body return h } func (h htmlRes) JSON(body any) Response { return JSON(body).wrap(h) } func (h htmlRes) Body(body io.ReadCloser) Response { return Body(body).wrap(h) } func (h htmlRes) Cookie(ck http.Cookie) Response { return Cookie(ck).wrap(h) } func (h htmlRes) GetStatus() (int, bool) { if h.res == nil { return 0, false } return h.res.GetStatus() } func (h htmlRes) getRedirect() (code redirect.Code, to string, ok bool) { if h.res == nil { return 0, "", false } return h.res.getRedirect() } func (h htmlRes) getBody() (body io.ReadCloser, ok bool, err error) { return io.NopCloser(bytes.NewBuffer(h.body)), true, nil } func (h htmlRes) getCookies() []http.Cookie { if h.res != nil { return h.res.getCookies() } return nil } func (h htmlRes) getContentType() (contentType string, ok bool) { return "text/html", true }