| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package codes
- import (
- "encoding/json"
- "fmt"
- "strconv"
- "github.com/go-kratos/kratos/v2/errors"
- )
- func Error(code int, msg string) error {
- e := errors.New(400, "", msg)
- e = e.WithMetadata(map[string]string{
- "code": fmt.Sprint(code),
- })
- return e
- }
- func ErrorData(code int, msg string, data interface{}) error {
- j, _ := json.Marshal(data)
- e := errors.New(400, string(j), msg)
- e = e.WithMetadata(map[string]string{
- "code": fmt.Sprint(code),
- })
- return e
- }
- func CommonError(err error) error {
- se := errors.FromError(err)
- if se == nil {
- return Error(10400, err.Error())
- }
- return se
- }
- func SystemErr(msg string) error {
- return Error(10500, msg)
- }
- // Customize 自定义返回值. 如自己重定向
- func Customize() error {
- return Error(1000, "")
- }
- func ParseErrorWithData(err error, data interface{}) (int, string) {
- st := errors.FromError(err)
- if st == nil {
- return 0, err.Error()
- }
- message := st.Message
- metadata := st.GetMetadata()
- code := st.Code
- if _, ok := metadata["code"]; ok {
- _code, _ := strconv.Atoi(metadata["code"])
- code = int32(_code)
- }
- if data != nil {
- if st.Reason != "" {
- json.Unmarshal([]byte(st.Reason), data)
- }
- }
- return int(code), message
- }
- func ParseError(err error) (int, string) {
- return ParseErrorWithData(err, nil)
- }
- func ParseErrorMsg(err error) string {
- _, msg := ParseErrorWithData(err, nil)
- return msg
- }
- func ErrorEqual(err1 error, err2 error) bool {
- code1, msg1 := ParseError(err1)
- code2, msg2 := ParseError(err2)
- if code1 == 0 && code2 == 0 {
- if msg1 == msg2 {
- return true
- }
- return false
- }
- if code1 == code2 {
- return true
- }
- return false
- }
|