mirror of https://github.com/rocboss/paopao-ce
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
1.5 KiB
76 lines
1.5 KiB
3 years ago
|
package errcode
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"net/http"
|
||
|
)
|
||
|
|
||
|
type Error struct {
|
||
|
code int
|
||
|
msg string
|
||
|
details []string
|
||
|
}
|
||
|
|
||
|
var codes = map[int]string{}
|
||
|
|
||
|
func NewError(code int, msg string) *Error {
|
||
|
if _, ok := codes[code]; ok {
|
||
|
panic(fmt.Sprintf("错误码 %d 已经存在,请更换一个", code))
|
||
|
}
|
||
|
codes[code] = msg
|
||
|
return &Error{code: code, msg: msg}
|
||
|
}
|
||
|
|
||
|
func (e *Error) Error() string {
|
||
|
return fmt.Sprintf("错误码: %d, 错误信息: %s", e.Code(), e.Msg())
|
||
|
}
|
||
|
|
||
|
func (e *Error) Code() int {
|
||
|
return e.code
|
||
|
}
|
||
|
|
||
|
func (e *Error) Msg() string {
|
||
|
return e.msg
|
||
|
}
|
||
|
|
||
|
func (e *Error) Msgf(args []interface{}) string {
|
||
|
return fmt.Sprintf(e.msg, args...)
|
||
|
}
|
||
|
|
||
|
func (e *Error) Details() []string {
|
||
|
return e.details
|
||
|
}
|
||
|
|
||
|
func (e *Error) WithDetails(details ...string) *Error {
|
||
|
newError := *e
|
||
|
newError.details = []string{}
|
||
|
newError.details = append(newError.details, details...)
|
||
|
|
||
|
return &newError
|
||
|
}
|
||
|
|
||
|
func (e *Error) StatusCode() int {
|
||
|
switch e.Code() {
|
||
|
case Success.Code():
|
||
|
return http.StatusOK
|
||
|
case ServerError.Code():
|
||
|
return http.StatusInternalServerError
|
||
|
case InvalidParams.Code():
|
||
|
return http.StatusBadRequest
|
||
|
case UnauthorizedAuthNotExist.Code():
|
||
|
fallthrough
|
||
|
case UnauthorizedAuthFailed.Code():
|
||
|
fallthrough
|
||
|
case UnauthorizedTokenError.Code():
|
||
|
fallthrough
|
||
|
case UnauthorizedTokenGenerate.Code():
|
||
|
fallthrough
|
||
|
case UnauthorizedTokenTimeout.Code():
|
||
|
return http.StatusUnauthorized
|
||
|
case TooManyRequests.Code():
|
||
|
return http.StatusTooManyRequests
|
||
|
}
|
||
|
|
||
|
return http.StatusInternalServerError
|
||
|
}
|