code.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package codes
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strconv"
  6. "github.com/go-kratos/kratos/v2/errors"
  7. )
  8. func Error(code int, msg string) error {
  9. e := errors.New(400, "", msg)
  10. e = e.WithMetadata(map[string]string{
  11. "code": fmt.Sprint(code),
  12. })
  13. return e
  14. }
  15. func ErrorData(code int, msg string, data interface{}) error {
  16. j, _ := json.Marshal(data)
  17. e := errors.New(400, string(j), msg)
  18. e = e.WithMetadata(map[string]string{
  19. "code": fmt.Sprint(code),
  20. })
  21. return e
  22. }
  23. func CommonError(err error) error {
  24. se := errors.FromError(err)
  25. if se == nil {
  26. return Error(10400, err.Error())
  27. }
  28. return se
  29. }
  30. func SystemErr(msg string) error {
  31. return Error(10500, msg)
  32. }
  33. //Customize 自定义返回值. 如自己重定向
  34. func Customize() error {
  35. return Error(1000, "")
  36. }
  37. func ParseErrorWithData(err error, data interface{}) (int, string) {
  38. st := errors.FromError(err)
  39. if st == nil {
  40. return 0, err.Error()
  41. }
  42. message := st.Message
  43. metadata := st.GetMetadata()
  44. code := st.Code
  45. if _, ok := metadata["code"]; ok {
  46. _code, _ := strconv.Atoi(metadata["code"])
  47. code = int32(_code)
  48. }
  49. if data != nil {
  50. if st.Reason != "" {
  51. json.Unmarshal([]byte(st.Reason), data)
  52. }
  53. }
  54. return int(code), message
  55. }
  56. func ParseError(err error) (int, string) {
  57. return ParseErrorWithData(err, nil)
  58. }