github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/errors/p2perrors.go (about)

     1  package errors
     2  
     3  import (
     4  	"errors"
     5  )
     6  
     7  const callStackDepth = 10
     8  
     9  type DetailError interface {
    10  	error
    11  	ErrCoder
    12  	CallStacker
    13  	GetRoot() error
    14  }
    15  
    16  func NewErr(errmsg string) error {
    17  	return errors.New(errmsg)
    18  }
    19  
    20  func NewDetailErr(err error, errcode ErrCode, errmsg string) DetailError {
    21  	if err == nil {
    22  		return nil
    23  	}
    24  
    25  	p2perr, ok := err.(p2pError)
    26  	if !ok {
    27  		p2perr.root = err
    28  		p2perr.errmsg = err.Error()
    29  		p2perr.callstack = getCallStack(0, callStackDepth)
    30  		p2perr.code = errcode
    31  
    32  	}
    33  	if errmsg != "" {
    34  		p2perr.errmsg = errmsg + ": " + p2perr.errmsg
    35  	}
    36  
    37  	return p2perr
    38  }
    39  
    40  func RootErr(err error) error {
    41  	if err, ok := err.(DetailError); ok {
    42  		return err.GetRoot()
    43  	}
    44  	return err
    45  }