github.com/sandwich-go/boost@v1.3.29/xerror/xerror_interface.go (about)

     1  package xerror
     2  
     3  // APICode Code feature.
     4  type APICode interface {
     5  	error
     6  	Code() int32
     7  }
     8  
     9  // apiStack Stack feature.
    10  type apiStack interface {
    11  	error
    12  	Stack() string
    13  }
    14  
    15  // apiCaller Caller feature.
    16  type apiCaller interface {
    17  	error
    18  	Caller(skip int) (file, funcName string, line int)
    19  }
    20  
    21  // apiCause Cause feature.
    22  type apiCause interface {
    23  	Error() string
    24  	Cause() error
    25  }
    26  
    27  // apiLogic Logic Exception feature.
    28  type apiLogic interface {
    29  	Error() string
    30  	Logic() bool
    31  }
    32  
    33  // Code 返回错误码数据,如果没有实现APICode则根据CodeHandlerForNotAPICode逻辑返回
    34  func Code(err error) int32 {
    35  	if err != nil {
    36  		if e, ok := err.(APICode); ok {
    37  			return e.Code()
    38  		}
    39  	}
    40  	return CodeHandlerForNotAPICode(err)
    41  }
    42  
    43  // Caller 返回调用信息
    44  func Caller(err error, skip int) (file, funcName string, line int) {
    45  	if err == nil {
    46  		return
    47  	}
    48  	if e, ok := err.(apiCaller); ok {
    49  		return e.Caller(skip)
    50  	}
    51  	return
    52  }
    53  
    54  // Logic 返回是否是Logic层异常,默认为false
    55  func Logic(err error) bool {
    56  	if err == nil {
    57  		return false
    58  	}
    59  	if e, ok := err.(apiLogic); ok {
    60  		return e.Logic()
    61  	}
    62  	// 兼容err2接口
    63  	if e, ok := err.(interface{ IsLogicException() bool }); ok {
    64  		return e.IsLogicException()
    65  	}
    66  	return false
    67  }
    68  
    69  // Cause 返回最底层的错误信息,如果没有实现apiCause,则返回当前错误信息
    70  func Cause(err error) error {
    71  	if err != nil {
    72  		if e, ok := err.(apiCause); ok {
    73  			return e.Cause()
    74  		}
    75  	}
    76  	return err
    77  }
    78  
    79  // Stack 返回堆栈信息,如果err不支持apiStack,则返回错误本身数据
    80  func Stack(err error) string {
    81  	if err == nil {
    82  		return ""
    83  	}
    84  	if e, ok := err.(apiStack); ok {
    85  		return e.Stack()
    86  	}
    87  	return err.Error()
    88  }