| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- package configure
-
- import (
- "fmt"
- )
-
- // ClientError SDK客户端错误
- type ClientError struct {
- Op string // 操作名称
- Message string // 错误信息
- Err error // 底层错误
- }
-
- // Error 实现error接口
- func (e *ClientError) Error() string {
- if e.Err != nil {
- return fmt.Sprintf("configure client error [%s]: %s: %v", e.Op, e.Message, e.Err)
- }
- return fmt.Sprintf("configure client error [%s]: %s", e.Op, e.Message)
- }
-
- // Unwrap 实现错误解包
- func (e *ClientError) Unwrap() error {
- return e.Err
- }
-
- // 错误定义
- var (
- // 配置错误
- ErrConfigInvalidURL = &ClientError{Op: "config", Message: "invalid URL"}
- ErrConfigInvalidAuth = &ClientError{Op: "config", Message: "invalid authentication credentials"}
- ErrConfigInvalidAuthType = &ClientError{Op: "config", Message: "invalid authentication type"}
-
- // 请求错误
- ErrRequestFailed = &ClientError{Op: "request", Message: "HTTP request failed"}
- ErrRequestTimeout = &ClientError{Op: "request", Message: "request timeout"}
- ErrInvalidResponse = &ClientError{Op: "request", Message: "invalid response format"}
-
- // API错误
- ErrAPIError = &ClientError{Op: "api", Message: "API returned error"}
- ErrNotFound = &ClientError{Op: "api", Message: "resource not found"}
- ErrAlreadyExists = &ClientError{Op: "api", Message: "resource already exists"}
- ErrUnauthorized = &ClientError{Op: "api", Message: "unauthorized"}
- ErrForbidden = &ClientError{Op: "api", Message: "forbidden"}
- ErrValidationFailed = &ClientError{Op: "api", Message: "validation failed"}
-
- // 客户端错误
- ErrClientNotInitialized = &ClientError{Op: "client", Message: "client not initialized"}
- )
-
- // NewClientError 创建新的客户端错误
- func NewClientError(op, message string, err error) *ClientError {
- return &ClientError{
- Op: op,
- Message: message,
- Err: err,
- }
- }
-
- // WrapError 包装错误为客户端错误
- func WrapError(op, message string, err error) error {
- if err == nil {
- return nil
- }
-
- // 如果已经是ClientError,直接返回
- if ce, ok := err.(*ClientError); ok {
- return ce
- }
-
- return NewClientError(op, message, err)
- }
|