github.com/fzfile/BaiduPCS-Go@v0.0.0-20200606205115-4408961cf336/baidupcs/pcserror/pcserror.go (about)

     1  // Package pcserror PCS错误包
     2  package pcserror
     3  
     4  import (
     5  	"github.com/fzfile/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  // HandleJSONParse 处理解析json
    68  func HandleJSONParse(op string, data io.Reader, info interface{}) (pcsError Error) {
    69  	var (
    70  		err     = jsonhelper.UnmarshalData(data, info)
    71  		errInfo = info.(Error)
    72  	)
    73  
    74  	if errInfo == nil {
    75  		errInfo = NewPCSErrorInfo(op)
    76  	}
    77  
    78  	if err != nil {
    79  		errInfo.SetJSONError(err)
    80  		return errInfo
    81  	}
    82  
    83  	// 设置出错类型为远程错误
    84  	if errInfo.GetRemoteErrCode() != 0 {
    85  		errInfo.SetRemoteError()
    86  		return errInfo
    87  	}
    88  
    89  	return nil
    90  }