tencent_ocr/.history/pkg/errors/errors_20250115162825.go
2025-01-15 16:59:27 +08:00

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
}