82 lines
1.2 KiB
Go
82 lines
1.2 KiB
Go
package errors
|
|
|
|
import (
|
|
"fmt"
|
|
)
|
|
|
|
type Error struct {
|
|
Message string
|
|
Cause error
|
|
Type ErrorType
|
|
}
|
|
|
|
type ErrorType int
|
|
|
|
const (
|
|
ErrorTypeUnknown ErrorType = iota
|
|
ErrorTypeClient
|
|
ErrorTypeServer
|
|
)
|
|
|
|
func (e *Error) Error() string {
|
|
if e.Cause != nil {
|
|
return fmt.Sprintf("%s: %v", e.Message, e.Cause)
|
|
}
|
|
return e.Message
|
|
}
|
|
|
|
func (e *Error) Unwrap() error {
|
|
return e.Cause
|
|
}
|
|
|
|
func New(message string) error {
|
|
return &Error{
|
|
Message: message,
|
|
Type: ErrorTypeUnknown,
|
|
}
|
|
}
|
|
|
|
func Wrap(err error, message string) error {
|
|
if err == nil {
|
|
return nil
|
|
}
|
|
return &Error{
|
|
Message: message,
|
|
Cause: err,
|
|
Type: ErrorTypeUnknown,
|
|
}
|
|
}
|
|
|
|
func NewClientError(message string) error {
|
|
return &Error{
|
|
Message: message,
|
|
Type: ErrorTypeClient,
|
|
}
|
|
}
|
|
|
|
func NewServerError(message string) error {
|
|
return &Error{
|
|
Message: message,
|
|
Type: ErrorTypeServer,
|
|
}
|
|
}
|
|
|
|
func IsClientError(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
if e, ok := err.(*Error); ok {
|
|
return e.Type == ErrorTypeClient
|
|
}
|
|
return false
|
|
}
|
|
|
|
func IsServerError(err error) bool {
|
|
if err == nil {
|
|
return false
|
|
}
|
|
if e, ok := err.(*Error); ok {
|
|
return e.Type == ErrorTypeServer
|
|
}
|
|
return false
|
|
}
|