package resp import ( "errors" "github.com/gin-gonic/gin" "github.com/spf13/cast" ) type res struct { Status int `json:"status"` Msg string `json:"msg"` Data any `json:"data"` Err any `json:"err"` // Deprecated: 200:1, other: -1 Code int `json:"code"` } func R200(c *gin.Context, data any, msgs ...string) { r := &res{ Status: 200, Msg: Msg200, Data: data, Code: 1, } if len(msgs) > 0 && msgs[0] != "" { r.Msg = msgs[0] } c.AbortWithStatusJSON(200, r) } func RE(c *gin.Context, err error) { var re *Error if errors.As(err, &re) { _r(c, re._r()) return } R500(c, "", nil, err) } func _r(c *gin.Context, r *res, args ...any) { length := len(args) switch length { case 0: break case 1: if msg, ok := args[0].(string); ok { r.Msg = msg } case 2: r.Data = args[1] case 3: r.Err = args[2] case 4: if code, err := cast.ToIntE(args[3]); err == nil { r.Code = code } } if r.Msg == "" { r.Msg = Msg(r.Status) } c.AbortWithStatusJSON(r.Status, r) } func R400(c *gin.Context, args ...any) { r := &res{ Status: 400, } _r(c, r, args...) } func R401(c *gin.Context, args ...any) { r := &res{ Status: 401, } _r(c, r, args...) } func R403(c *gin.Context, args ...any) { r := &res{ Status: 403, } _r(c, r, args...) } func R500(c *gin.Context, args ...any) { r := &res{ Status: 500, } _r(c, r, args...) } func R501(c *gin.Context, args ...any) { r := &res{ Status: 501, } _r(c, r, args...) }