|
|
@@ -1,8 +1,9 @@
|
|
|
package fserr
|
|
|
|
|
|
import (
|
|
|
+ "errors"
|
|
|
"fmt"
|
|
|
- "github.com/pkg/errors"
|
|
|
+ pkgerrors "github.com/pkg/errors"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
@@ -35,9 +36,9 @@ func ExplainCode(code uint32) string {
|
|
|
}
|
|
|
|
|
|
func TransferFromError(err error) *Error {
|
|
|
- transferedErr, ok := err.(*Error)
|
|
|
+ transferErr, ok := err.(*Error)
|
|
|
if ok {
|
|
|
- return transferedErr
|
|
|
+ return transferErr
|
|
|
}
|
|
|
|
|
|
return &Error{
|
|
|
@@ -46,36 +47,37 @@ func TransferFromError(err error) *Error {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-func NewUnknownError(message string) error {
|
|
|
+func NewUnknownError(message string) *Error {
|
|
|
return newError(ErrUnknownCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewParamError(message string) error {
|
|
|
+func NewParamError(message string) *Error {
|
|
|
return newError(ErrParamCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewConflictError(message string) error {
|
|
|
+func NewConflictError(message string) *Error {
|
|
|
return newError(ErrConflictCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewNotExistError(message string) error {
|
|
|
+func NewNotExistError(message string) *Error {
|
|
|
return newError(ErrNotExistCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewTypeTransferError(message string) error {
|
|
|
+func NewTypeTransferError(message string) *Error {
|
|
|
return newError(ErrTypeTransferCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewAuthError(message string) error {
|
|
|
+func NewAuthError(message string) *Error {
|
|
|
return newError(ErrAuthCode, message)
|
|
|
}
|
|
|
|
|
|
-func NewCustomError(message string) error {
|
|
|
+func NewCustomError(message string) *Error {
|
|
|
return newError(ErrCustomCode, message)
|
|
|
}
|
|
|
|
|
|
type Error struct {
|
|
|
- code uint32
|
|
|
+ code uint32
|
|
|
+ message string
|
|
|
error
|
|
|
}
|
|
|
|
|
|
@@ -88,9 +90,27 @@ func (err *Error) Error() string {
|
|
|
return errMsg
|
|
|
}
|
|
|
|
|
|
+func (err *Error) WithStack() error {
|
|
|
+ return &Error{
|
|
|
+ code: err.code,
|
|
|
+ message: err.message,
|
|
|
+ error: pkgerrors.New(err.message),
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (err *Error) Is(target error) bool {
|
|
|
+ transferErr, ok := target.(*Error)
|
|
|
+ if !ok {
|
|
|
+ return false
|
|
|
+ }
|
|
|
+
|
|
|
+ return err.message == transferErr.message && err.code == transferErr.code
|
|
|
+}
|
|
|
+
|
|
|
func newError(code uint32, message string) *Error {
|
|
|
return &Error{
|
|
|
- code: code,
|
|
|
- error: errors.New(message),
|
|
|
+ code: code,
|
|
|
+ message: message,
|
|
|
+ error: errors.New(message),
|
|
|
}
|
|
|
}
|