package http_server import ( "fmt" "github.com/CloudyKit/jet/v6" "github.com/gin-gonic/gin" "net/http" "pink_fox/src/app/types" ) type Response interface { Render() } type StringResponse struct { str string ctx *gin.Context } func NewStringResponse(s string, ctx *gin.Context) *StringResponse { return &StringResponse{str: s, ctx: ctx} } func (it *StringResponse) Render() { it.ctx.String(http.StatusOK, it.str) } type HtmlErrorResponse struct { code int msg string ctx *gin.Context } func NewHtmlErrorResponse(code int, ctx *gin.Context) *HtmlErrorResponse { return &HtmlErrorResponse{code: code, ctx: ctx} } func (it *HtmlErrorResponse) Msg(msg string) *HtmlErrorResponse { it.msg = msg return it } func (it *HtmlErrorResponse) Render() { message := "" if it.msg != "" { message = fmt.Sprintf("

%s

", it.msg) } it.ctx.Header("Content-Type", "text/html; charset=utf-8") it.ctx.String(it.code, fmt.Sprintf("

%d %s

\n%s\n", it.code, http.StatusText(it.code), message)) } type RedirectResponse struct { code int to string ctx *gin.Context } func NewRedirectResponse(to string, ctx *gin.Context) *RedirectResponse { return &RedirectResponse{code: 302, to: to, ctx: ctx} } func (it *RedirectResponse) SetCode(code int) *RedirectResponse { it.code = code return it } func (it *RedirectResponse) Render() { it.ctx.Redirect(it.code, it.to) } type ViewResponse struct { ctx *gin.Context makeViewObject types.MakeViewObject id int16 file string data any } func NewViewResponse(ctx *gin.Context, makeViewObject types.MakeViewObject, id int16, file string, data any) *ViewResponse { return &ViewResponse{ ctx: ctx, makeViewObject: makeViewObject, id: id, file: file, data: data, } } func (it *ViewResponse) Render() { data := make(jet.VarMap) data.Set("vi", it.makeViewObject(it.id)) data.Set("it", it.data) it.ctx.HTML(http.StatusOK, it.file, data) }