package response import ( "encoding/json" "github.com/gin-gonic/gin" "net/http" ) type Response struct { Code int `json:"code"` Message string `json:"message"` Data any `json:"data,omitempty"` } func NewResponse() *Response { return &Response{ Code: http.StatusOK, Message: "success", } } func (r *Response) WithCode(code int) *Response { r.Code = code return r } func (r *Response) WithMessage(message string) *Response { r.Message = message return r } func (r *Response) WithData(data any) *Response { r.Data = data return r } func (r *Response) Error(err error) *Response { r.Code = http.StatusInternalServerError r.Message = err.Error() return r } func (r *Response) Success(message ...string) *Response { r.Code = http.StatusOK if len(message) > 0 { r.Message = message[0] } else { r.Message = "success" } return r } func (r *Response) Fail(message ...string) *Response { r.Code = http.StatusInternalServerError if len(message) > 0 { r.Message = message[0] } else { r.Message = "fail" } return r } func (r *Response) Send(c *gin.Context) { c.JSON(http.StatusOK, r) } func (r *Response) ToJSON() (string, error) { data, err := json.Marshal(r) if err != nil { return "", err } return string(data), nil }