errorx.go 869 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package errorx
  2. import (
  3. "fmt"
  4. "runtime"
  5. "strings"
  6. "github.com/tal-tech/go-zero/tools/goctl/internal/version"
  7. )
  8. var errorFormat = `goctl: generation error: %+v
  9. goctl version: %s
  10. %s`
  11. // GoctlError represents a goctl error.
  12. type GoctlError struct {
  13. message []string
  14. err error
  15. }
  16. func (e *GoctlError) Error() string {
  17. detail := wrapMessage(e.message...)
  18. v := fmt.Sprintf("%s %s/%s", version.BuildVersion, runtime.GOOS, runtime.GOARCH)
  19. return fmt.Sprintf(errorFormat, e.err, v, detail)
  20. }
  21. // Wrap wraps an error with goctl version and message.
  22. func Wrap(err error, message ...string) error {
  23. e, ok := err.(*GoctlError)
  24. if ok {
  25. return e
  26. }
  27. return &GoctlError{
  28. message: message,
  29. err: err,
  30. }
  31. }
  32. func wrapMessage(message ...string) string {
  33. if len(message) == 0 {
  34. return ""
  35. }
  36. return fmt.Sprintf(`message: %s`, strings.Join(message, "\n"))
  37. }