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

     1  package pcserror
     2  
     3  import (
     4  	"fmt"
     5  )
     6  
     7  type (
     8  	// DlinkErrInfo dlink服务器错误信息
     9  	DlinkErrInfo struct {
    10  		Operation string
    11  		ErrType   ErrType
    12  		Err       error
    13  		ErrNo     int    `json:"errno"`
    14  		Msg       string `json:"msg"`
    15  	}
    16  )
    17  
    18  // NewDlinkErrInfo 初始化DlinkErrInfo
    19  func NewDlinkErrInfo(op string) *DlinkErrInfo {
    20  	return &DlinkErrInfo{
    21  		Operation: op,
    22  	}
    23  }
    24  
    25  // SetJSONError 设置JSON错误
    26  func (dle *DlinkErrInfo) SetJSONError(err error) {
    27  	dle.ErrType = ErrTypeJSONParseError
    28  	dle.Err = err
    29  }
    30  
    31  // SetNetError 设置网络错误
    32  func (dle *DlinkErrInfo) SetNetError(err error) {
    33  	dle.ErrType = ErrTypeNetError
    34  	dle.Err = err
    35  }
    36  
    37  // SetRemoteError 设置远端服务器错误
    38  func (dle *DlinkErrInfo) SetRemoteError() {
    39  	dle.ErrType = ErrTypeRemoteError
    40  }
    41  
    42  // GetOperation 获取操作
    43  func (dle *DlinkErrInfo) GetOperation() string {
    44  	return dle.Operation
    45  }
    46  
    47  // GetErrType 获取错误类型
    48  func (dle *DlinkErrInfo) GetErrType() ErrType {
    49  	return dle.ErrType
    50  }
    51  
    52  // GetRemoteErrCode 获取远端服务器错误代码
    53  func (dle *DlinkErrInfo) GetRemoteErrCode() int {
    54  	return dle.ErrNo
    55  }
    56  
    57  // GetRemoteErrMsg 获取远端服务器错误消息
    58  func (dle *DlinkErrInfo) GetRemoteErrMsg() string {
    59  	return dle.Msg
    60  }
    61  
    62  // GetError 获取原始错误
    63  func (dle *DlinkErrInfo) GetError() error {
    64  	return dle.Err
    65  }
    66  
    67  func (dle *DlinkErrInfo) Error() string {
    68  	if dle.Operation == "" {
    69  		if dle.Err != nil {
    70  			return dle.Err.Error()
    71  		}
    72  		return StrSuccess
    73  	}
    74  
    75  	switch dle.ErrType {
    76  	case ErrTypeInternalError:
    77  		return fmt.Sprintf("%s: %s, %s", dle.Operation, StrInternalError, dle.Err)
    78  	case ErrTypeJSONParseError:
    79  		return fmt.Sprintf("%s: %s, %s", dle.Operation, StrJSONParseError, dle.Err)
    80  	case ErrTypeNetError:
    81  		return fmt.Sprintf("%s: %s, %s", dle.Operation, StrNetError, dle.Err)
    82  	case ErrTypeRemoteError:
    83  		if dle.ErrNo == 0 {
    84  			return fmt.Sprintf("%s: %s", dle.Operation, StrSuccess)
    85  		}
    86  
    87  		return fmt.Sprintf("%s: 遇到错误, %s, 代码: %d, 消息: %s", dle.Operation, StrRemoteError, dle.ErrNo, dle.Msg)
    88  	case ErrTypeOthers:
    89  		if dle.Err == nil {
    90  			return fmt.Sprintf("%s: %s", dle.Operation, StrSuccess)
    91  		}
    92  
    93  		return fmt.Sprintf("%s, 遇到错误, %s", dle.Operation, dle.Err)
    94  	default:
    95  		panic("dlinkerrinfo: unknown ErrType")
    96  	}
    97  }