74 lines
1.2 KiB
Go

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
}