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  }