github.com/johnnyeven/libtools@v0.0.0-20191126065708-61829c1adf46/courier/status_error/status_err_code.go (about) 1 package status_error 2 3 import ( 4 "bytes" 5 "fmt" 6 ) 7 8 var StatusErrorCodes = StatusErrorCodeMap{} 9 10 type StatusErrorCodeMap map[int64]StatusError 11 12 func (statusErrorCodeMap StatusErrorCodeMap) Register(key string, code int64, msg string, desc string, canBeTalkError bool) { 13 statusErrorCodeMap[code] = StatusError{ 14 Key: key, 15 Code: code, 16 Msg: msg, 17 Desc: desc, 18 CanBeErrorTalk: canBeTalkError, 19 } 20 } 21 22 func (statusErrorCodeMap StatusErrorCodeMap) Merge(targetStatusErrorCodeMap StatusErrorCodeMap) StatusErrorCodeMap { 23 for code, statusError := range targetStatusErrorCodeMap { 24 statusErrorCodeMap[code] = statusError 25 } 26 return statusErrorCodeMap 27 } 28 29 func (statusErrorCodeMap StatusErrorCodeMap) String() string { 30 buffer := bytes.Buffer{} 31 for _, statusError := range statusErrorCodeMap { 32 buffer.WriteString(statusError.String() + "\n") 33 } 34 return buffer.String() 35 } 36 37 type StatusErrorCode int64 38 39 func (code StatusErrorCode) Is(err error) bool { 40 return FromError(err).Code == int64(code) 41 } 42 43 func (code StatusErrorCode) StatusError() *StatusError { 44 statusError, ok := StatusErrorCodes[int64(code)] 45 if !ok { 46 panic(fmt.Errorf("%d is not registered to statusErrorCodes", int64(code))) 47 } 48 return &statusError 49 } 50 51 // deprecated 52 func (code StatusErrorCode) ToError() *StatusError { 53 return code.StatusError() 54 } 55 56 func (code StatusErrorCode) Error() string { 57 statusError := code.StatusError() 58 return statusError.Error() 59 } 60 61 func DemoErr() error { 62 return InvalidSecret 63 }