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 }