github.com/qjfoidnh/BaiduPCS-Go@v0.0.0-20231011165705-caa18a3765f3/baidupcs/pcserror/pcserror.go (about)

     1  // Package pcserror PCS错误包
     2  package pcserror
     3  
     4  import (
     5  	"github.com/qjfoidnh/BaiduPCS-Go/pcsutil/jsonhelper"
     6  	"io"
     7  )
     8  
     9  type (
    10  	// ErrType 错误类型
    11  	ErrType int
    12  
    13  	// Error 错误信息接口
    14  	Error interface {
    15  		error
    16  		SetJSONError(err error)
    17  		SetNetError(err error)
    18  		SetRemoteError()
    19  		GetOperation() string
    20  		GetErrType() ErrType
    21  		GetRemoteErrCode() int
    22  		GetRemoteErrMsg() string
    23  		GetError() error
    24  	}
    25  )
    26  
    27  const (
    28  	// ErrorTypeNoError 无错误
    29  	ErrorTypeNoError ErrType = iota
    30  	// ErrTypeInternalError 内部错误
    31  	ErrTypeInternalError
    32  	// ErrTypeRemoteError 远端服务器返回错误
    33  	ErrTypeRemoteError
    34  	// ErrTypeNetError 网络错误
    35  	ErrTypeNetError
    36  	// ErrTypeJSONParseError json 数据解析失败
    37  	ErrTypeJSONParseError
    38  	// ErrTypeOthers 其他错误
    39  	ErrTypeOthers
    40  )
    41  
    42  const (
    43  	// StrSuccess 操作成功
    44  	StrSuccess = "操作成功"
    45  	// StrInternalError 内部错误
    46  	StrInternalError = "内部错误"
    47  	// StrRemoteError 远端服务器返回错误
    48  	StrRemoteError = "远端服务器返回错误"
    49  	// StrNetError 网络错误
    50  	StrNetError = "网络错误"
    51  	// StrJSONParseError json 数据解析失败
    52  	StrJSONParseError = "json 数据解析失败"
    53  )
    54  
    55  // DecodePCSJSONError 解析PCS JSON的错误
    56  func DecodePCSJSONError(opreation string, data io.Reader) Error {
    57  	errInfo := NewPCSErrorInfo(opreation)
    58  	return HandleJSONParse(opreation, data, errInfo)
    59  }
    60  
    61  // DecodePanJSONError 解析Pan JSON的错误
    62  func DecodePanJSONError(opreation string, data io.Reader) Error {
    63  	errInfo := NewPanErrorInfo(opreation)
    64  	return HandleJSONParse(opreation, data, errInfo)
    65  }
    66  
    67  // DecodeXPanJSONError 解析XPan JSON的错误
    68  func DecodeXPanJSONError(opreation string, data io.Reader) Error {
    69  	errInfo := NewXPanErrorInfo(opreation)
    70  	return HandleJSONParse(opreation, data, errInfo)
    71  }
    72  
    73  // HandleJSONParse 处理解析json
    74  func HandleJSONParse(op string, data io.Reader, info interface{}) (pcsError Error) {
    75  	var (
    76  		err     = jsonhelper.UnmarshalData(data, info)
    77  		errInfo = info.(Error)
    78  	)
    79  
    80  	if errInfo == nil {
    81  		errInfo = NewPCSErrorInfo(op)
    82  	}
    83  
    84  	if err != nil {
    85  		errInfo.SetJSONError(err)
    86  		return errInfo
    87  	}
    88  
    89  	// 设置出错类型为远程错误
    90  	if errInfo.GetRemoteErrCode() != 0 {
    91  		errInfo.SetRemoteError()
    92  		return errInfo
    93  	}
    94  
    95  	return nil
    96  }