Feature goctl error wrap (#995)
* Add `Wrap` in file errorx.go * Wrap error with `GoctlError` * format code * Refactor package `env` to `version` * Refactor package `IsVersionGatherThan` * fix typo Co-authored-by: anqiansong <anqiansong@bytedance.com>
This commit is contained in:
15
tools/goctl/internal/errorx/errorx._test.go
Normal file
15
tools/goctl/internal/errorx/errorx._test.go
Normal file
@@ -0,0 +1,15 @@
|
||||
package errorx
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestWrap(t *testing.T) {
|
||||
err := errors.New("foo")
|
||||
err = Wrap(err)
|
||||
_, ok := err.(*GoctlError)
|
||||
assert.True(t, ok)
|
||||
}
|
||||
44
tools/goctl/internal/errorx/errorx.go
Normal file
44
tools/goctl/internal/errorx/errorx.go
Normal file
@@ -0,0 +1,44 @@
|
||||
package errorx
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/tal-tech/go-zero/tools/goctl/internal/version"
|
||||
)
|
||||
|
||||
var errorFormat = `goctl: generation error: %+v
|
||||
goctl version: %s
|
||||
%s`
|
||||
|
||||
type GoctlError struct {
|
||||
message []string
|
||||
err error
|
||||
}
|
||||
|
||||
func (e *GoctlError) Error() string {
|
||||
detail := wrapMessage(e.message...)
|
||||
v := fmt.Sprintf("%s %s/%s", version.BuildVersion, runtime.GOOS, runtime.GOARCH)
|
||||
return fmt.Sprintf(errorFormat, e.err, v, detail)
|
||||
}
|
||||
|
||||
// Wrap wraps an error with goctl version and message.
|
||||
func Wrap(err error, message ...string) error {
|
||||
e, ok := err.(*GoctlError)
|
||||
if ok {
|
||||
return e
|
||||
}
|
||||
|
||||
return &GoctlError{
|
||||
message: message,
|
||||
err: err,
|
||||
}
|
||||
}
|
||||
|
||||
func wrapMessage(message ...string) string {
|
||||
if len(message) == 0 {
|
||||
return ""
|
||||
}
|
||||
return fmt.Sprintf(`message: %s`, strings.Join(message, "\n"))
|
||||
}
|
||||
Reference in New Issue
Block a user