Improved import, by group improt.

This commit is contained in:
houseme
2021-11-14 18:24:38 +08:00
7 changed files with 45 additions and 16 deletions

View File

@ -22,7 +22,7 @@ import (
type Error struct {
error error // Wrapped error.
stack stack // Stack array, which records the stack information when this error is created or wrapped.
text string // Error text, which is created by New* functions.
text string // Custom Error text when Error is created, might be empty when its code is not nil.
code gcode.Code // Error code if necessary.
}
@ -32,8 +32,7 @@ const (
)
var (
// goRootForFilter is used for stack filtering purpose.
// Mainly for development environment.
// goRootForFilter is used for stack filtering in development environment purpose.
goRootForFilter = runtime.GOROOT()
)
@ -108,18 +107,18 @@ func (err *Error) Format(s fmt.State, verb rune) {
switch {
case s.Flag('-'):
if err.text != "" {
io.WriteString(s, err.text)
_, _ = io.WriteString(s, err.text)
} else {
io.WriteString(s, err.Error())
_, _ = io.WriteString(s, err.Error())
}
case s.Flag('+'):
if verb == 's' {
io.WriteString(s, err.Stack())
_, _ = io.WriteString(s, err.Stack())
} else {
io.WriteString(s, err.Error()+"\n"+err.Stack())
_, _ = io.WriteString(s, err.Error()+"\n"+err.Stack())
}
default:
io.WriteString(s, err.Error())
_, _ = io.WriteString(s, err.Error())
}
}
}
@ -177,6 +176,14 @@ func (err *Error) Next() error {
return err.error
}
// SetCode updates the internal code with given code.
func (err *Error) SetCode(code gcode.Code) {
if err == nil {
return
}
err.code = code
}
// MarshalJSON implements the interface MarshalJSON for json.Marshal.
// Note that do not use pointer as its receiver here.
func (err *Error) MarshalJSON() ([]byte, error) {

View File

@ -311,6 +311,18 @@ func Test_Code(t *testing.T) {
})
}
func Test_SetCode(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err := gerror.New("123")
t.Assert(gerror.Code(err), -1)
t.Assert(err.Error(), "123")
err.(*gerror.Error).SetCode(gcode.CodeValidationFailed)
t.Assert(gerror.Code(err), gcode.CodeValidationFailed)
t.Assert(err.Error(), "123")
})
}
func Test_Json(t *testing.T) {
gtest.C(t, func(t *gtest.T) {
err := gerror.Wrap(gerror.New("1"), "2")