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 }