package response import ( "fmt" "io" "net/http" "ruben/inventory2/server/redirect" ) type ( headerRes struct { name string value string res Response } ) var _ Response = headerRes{} func header(name, value string) Response { return headerRes{ name: name, value: value, } } func HXPushURL(v string) Response { return header("HX-Push-Url", v) } func HXLocation(v string) Response { return header("HX-Location", v) } func HXPushUrl(v string) Response { return header("HX-Push-Url", v) } func HXRedirect(v string) Response { return header("HX-Redirect", v) } func HXRefresh(v string) Response { return header("HX-Refresh", v) } func HXReplaceUrl(v string) Response { return header("HX-Replace-Url", v) } func HXReswap(v string) Response { return header("HX-Reswap", v) } func HXRetarget(v string) Response { return header("HX-Retarget", v) } func HXReselect(v string) Response { return header("HX-Reselect", v) } func HXTrigger(v string) Response { return header("HX-Trigger", v) } func HXTriggerAfterSettle(v string) Response { return header("HX-Trigger-After-Settle", v) } func HXTriggerAfterSwap(v string) Response { return header("HX-Trigger-After-Swap", v) } func (h headerRes) String() string { if h.res != nil { return fmt.Sprintf(`{"header": {"name": %q, "value": %q}, "nested": %s}`, h.name, h.value, h.res) } return fmt.Sprintf(`{"header": {"name": %q, "value": %q}}`, h.name, h.value) } func (h headerRes) wrap(res Response) Response { h.res = res return h } func (h headerRes) Status(code int) Response { return Status(code).wrap(h) } func (h headerRes) Header(name, value string) Response { h.name = name h.value = value return h } func (h headerRes) Redirect(code redirect.Code, to string) Response { return Redirect(code, to).wrap(h) } func (h headerRes) HTML(body []byte) Response { return HTML(body).wrap(h) } func (h headerRes) JSON(body any) Response { return JSON(body).wrap(h) } func (h headerRes) Body(body io.ReadCloser) Response { return Body(body).wrap(h) } func (h headerRes) Cookie(ck http.Cookie) Response { return Cookie(ck).wrap(h) } func (h headerRes) HXPushURL(v string) Response { return HXPushURL(v).wrap(h) } func (h headerRes) HXLocation(v string) Response { return HXLocation(v).wrap(h) } func (h headerRes) HXPushUrl(v string) Response { return HXPushUrl(v).wrap(h) } func (h headerRes) HXRedirect(v string) Response { return HXRedirect(v).wrap(h) } func (h headerRes) HXRefresh(v string) Response { return HXRefresh(v).wrap(h) } func (h headerRes) HXReplaceUrl(v string) Response { return HXReplaceUrl(v).wrap(h) } func (h headerRes) HXReswap(v string) Response { return HXReswap(v).wrap(h) } func (h headerRes) HXRetarget(v string) Response { return HXRetarget(v).wrap(h) } func (h headerRes) HXReselect(v string) Response { return HXReselect(v).wrap(h) } func (h headerRes) HXTrigger(v string) Response { return HXTrigger(v).wrap(h) } func (h headerRes) HXTriggerAfterSettle(v string) Response { return HXTriggerAfterSettle(v).wrap(h) } func (h headerRes) HXTriggerAfterSwap(v string) Response { return HXTriggerAfterSwap(v).wrap(h) } func (h headerRes) GetStatus() (int, bool) { if h.res == nil { return 0, false } return h.res.GetStatus() } func (h headerRes) getHeaders() [][2]string { hdr := [2]string{h.name, h.value} if h.res == nil { return [][2]string{hdr} } return append(h.res.getHeaders(), hdr) } func (h headerRes) GetRedirect() (code redirect.Code, to string, ok bool) { if h.res == nil { return 0, "", false } return h.res.GetRedirect() } func (h headerRes) getBody() (body io.ReadCloser, ok bool, err error) { if h.res == nil { return nil, false, nil } return h.res.getBody() } func (h headerRes) getCookies() []http.Cookie { if h.res != nil { return h.res.getCookies() } return nil } func (h headerRes) getContentType() (contentType string, ok bool) { if h.res != nil { return h.res.getContentType() } return "", false }