另客网go项目公用的代码库

tr.go 1.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. package tr
  2. import (
  3. "github.com/sirupsen/logrus"
  4. "github.com/wpajqz/linker"
  5. )
  6. type Checker interface {
  7. Check() error
  8. }
  9. func ParseParamFail(ctx linker.Context, param interface{}, fs ...func() error) bool {
  10. if param != nil {
  11. err := ctx.ParseParam(param)
  12. if err != nil {
  13. err = TCPError{Status: linker.StatusBadRequest, Msg: err.Error()}
  14. return Fail(ctx, err)
  15. }
  16. if checker, ok := param.(Checker); ok {
  17. err := checker.Check()
  18. if err != nil {
  19. err = TCPError{Status: linker.StatusBadRequest, Msg: err.Error()}
  20. return Fail(ctx, checker.Check())
  21. }
  22. }
  23. }
  24. for _, f := range fs {
  25. err := f()
  26. if err != nil {
  27. err = TCPError{Status: linker.StatusBadRequest, Msg: err.Error()}
  28. return Fail(ctx, err)
  29. }
  30. }
  31. return false
  32. }
  33. func Fail(ctx linker.Context, err error) bool {
  34. if err == nil {
  35. return false
  36. }
  37. status := linker.StatusInternalServerError
  38. if v, ok := err.(TCPError); ok {
  39. status = v.Status
  40. }
  41. if status == linker.StatusInternalServerError {
  42. logrus.Error(err)
  43. }
  44. ctx.Error(status, err.Error())
  45. return true
  46. }
  47. func Success(ctx linker.Context, data interface{}) {
  48. ctx.Success(data)
  49. }