1
0

utils.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package errors
  2. import (
  3. "errors"
  4. "strings"
  5. )
  6. func NewClass(code string, msgList ...string) WTErrorClass {
  7. var msg string
  8. if len(msgList) == 0 {
  9. msg = strings.Replace(code, "_", " ", -1)
  10. } else {
  11. msg = msgList[0]
  12. }
  13. return &wtErrorClass{
  14. msg: msg,
  15. code: code,
  16. base: false,
  17. }
  18. }
  19. func newBaseClass(code string, msgList ...string) WTErrorClass {
  20. var msg string
  21. if len(msgList) == 0 {
  22. msg = strings.Replace(code, "_", " ", -1)
  23. } else {
  24. msg = msgList[0]
  25. }
  26. return &wtErrorClass{
  27. msg: msg,
  28. code: code,
  29. base: true,
  30. }
  31. }
  32. func Is(err error, target any) bool {
  33. var wtErr WTError
  34. var normalErr error
  35. if errors.As(err, &wtErr) {
  36. errClass, isClass := target.(WTErrorClass)
  37. if isClass {
  38. return errClass.Code() == wtErr.Code()
  39. }
  40. wtTarget, isTarget := target.(WTError)
  41. if isTarget {
  42. if wtTarget == wtErr {
  43. return true
  44. }
  45. if wtTarget.Code() == wtErr.Code() {
  46. return true
  47. }
  48. return errors.Is(err, wtTarget)
  49. }
  50. } else if errors.As(err, &normalErr) {
  51. return errors.Is(err, normalErr)
  52. }
  53. return false
  54. }
  55. func As(err error, target any) bool {
  56. return errors.As(err, target)
  57. }