errorx.go 829 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. type GoctlError struct {
  12. message []string
  13. err error
  14. }
  15. func (e *GoctlError) Error() string {
  16. detail := wrapMessage(e.message...)
  17. v := fmt.Sprintf("%s %s/%s", version.BuildVersion, runtime.GOOS, runtime.GOARCH)
  18. return fmt.Sprintf(errorFormat, e.err, v, detail)
  19. }
  20. // Wrap wraps an error with goctl version and message.
  21. func Wrap(err error, message ...string) error {
  22. e, ok := err.(*GoctlError)
  23. if ok {
  24. return e
  25. }
  26. return &GoctlError{
  27. message: message,
  28. err: err,
  29. }
  30. }
  31. func wrapMessage(message ...string) string {
  32. if len(message) == 0 {
  33. return ""
  34. }
  35. return fmt.Sprintf(`message: %s`, strings.Join(message, "\n"))
  36. }