|
|
@@ -1,9 +1,9 @@
|
|
|
package fserr
|
|
|
|
|
|
import (
|
|
|
- "errors"
|
|
|
"fmt"
|
|
|
- pkgerrors "github.com/pkg/errors"
|
|
|
+ "github.com/pkg/errors"
|
|
|
+ "io"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
@@ -41,11 +41,7 @@ func TransferFromError(err error) *Error {
|
|
|
return transferErr
|
|
|
}
|
|
|
|
|
|
- return &Error{
|
|
|
- code: ErrUnknownCode,
|
|
|
- message: err.Error(),
|
|
|
- error: pkgerrors.New(err.Error()),
|
|
|
- }
|
|
|
+ return NewUnknownError(err.Error())
|
|
|
}
|
|
|
|
|
|
func NewUnknownError(message string) *Error {
|
|
|
@@ -77,9 +73,9 @@ func NewCustomError(message string) *Error {
|
|
|
}
|
|
|
|
|
|
type Error struct {
|
|
|
- code uint32
|
|
|
- message string
|
|
|
- error
|
|
|
+ code uint32
|
|
|
+ message string
|
|
|
+ StackMessage string
|
|
|
}
|
|
|
|
|
|
func (err *Error) Code() uint32 {
|
|
|
@@ -87,15 +83,14 @@ func (err *Error) Code() uint32 {
|
|
|
}
|
|
|
|
|
|
func (err *Error) Error() string {
|
|
|
- errMsg := fmt.Sprintf("%+v\n", err.error)
|
|
|
- return errMsg
|
|
|
+ return err.message
|
|
|
}
|
|
|
|
|
|
func (err *Error) WithStack() error {
|
|
|
return &Error{
|
|
|
- code: err.code,
|
|
|
- message: err.message,
|
|
|
- error: pkgerrors.New(err.message),
|
|
|
+ code: err.code,
|
|
|
+ message: err.message,
|
|
|
+ StackMessage: formStackMessage(err.message),
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -108,10 +103,29 @@ func (err *Error) Is(target error) bool {
|
|
|
return err.message == transferErr.message && err.code == transferErr.code
|
|
|
}
|
|
|
|
|
|
+func (err *Error) Format(s fmt.State, verb rune) {
|
|
|
+ switch verb {
|
|
|
+ case 'v':
|
|
|
+ if s.Flag('+') {
|
|
|
+ io.WriteString(s, err.StackMessage)
|
|
|
+ return
|
|
|
+ }
|
|
|
+ fallthrough
|
|
|
+ case 's':
|
|
|
+ io.WriteString(s, err.message)
|
|
|
+ case 'q':
|
|
|
+ fmt.Fprintf(s, "%q", err.message)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
func newError(code uint32, message string) *Error {
|
|
|
return &Error{
|
|
|
- code: code,
|
|
|
- message: message,
|
|
|
- error: errors.New(message),
|
|
|
+ code: code,
|
|
|
+ message: message,
|
|
|
+ StackMessage: formStackMessage(message),
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+func formStackMessage(message string) string {
|
|
|
+ return fmt.Sprintf("\n%+v\n", errors.New(message))
|
|
|
+}
|