github.com/decred/dcrlnd@v0.7.6/routing/errors.go (about) 1 package routing 2 3 import "github.com/go-errors/errors" 4 5 // errorCode is used to represent the various errors that can occur within this 6 // package. 7 type errorCode uint8 8 9 const ( 10 // ErrOutdated is returned when the routing update already have 11 // been applied, or a newer update is already known. 12 ErrOutdated errorCode = iota 13 14 // ErrIgnored is returned when the update have been ignored because 15 // this update can't bring us something new, or because a node 16 // announcement was given for node not found in any channel. 17 ErrIgnored 18 19 // ErrChannelSpent is returned when we go to validate a channel, but 20 // the purported funding output has actually already been spent on 21 // chain. 22 ErrChannelSpent 23 24 // ErrNoFundingTransaction is returned when we are unable to find the 25 // funding transaction described by the short channel ID on chain. 26 ErrNoFundingTransaction 27 28 // ErrInvalidFundingOutput is returned if the channle funding output 29 // fails validation. 30 ErrInvalidFundingOutput 31 32 // ErrVBarrierShuttingDown signals that the barrier has been requested 33 // to shutdown, and that the caller should not treat the wait condition 34 // as fulfilled. 35 ErrVBarrierShuttingDown 36 37 // ErrParentValidationFailed signals that the validation of a 38 // dependent's parent failed, so the dependent must not be processed. 39 ErrParentValidationFailed 40 ) 41 42 // routerError is a structure that represent the error inside the routing package, 43 // this structure carries additional information about error code in order to 44 // be able distinguish errors outside of the current package. 45 type routerError struct { 46 err *errors.Error 47 code errorCode 48 } 49 50 // Error represents errors as the string 51 // NOTE: Part of the error interface. 52 func (e *routerError) Error() string { 53 return e.err.Error() 54 } 55 56 // A compile time check to ensure routerError implements the error interface. 57 var _ error = (*routerError)(nil) 58 59 // newErrf creates a routerError by the given error formatted description and 60 // its corresponding error code. 61 func newErrf(code errorCode, format string, a ...interface{}) *routerError { 62 return &routerError{ 63 code: code, 64 err: errors.Errorf(format, a...), 65 } 66 } 67 68 // IsError is a helper function which is needed to have ability to check that 69 // returned error has specific error code. 70 func IsError(e interface{}, codes ...errorCode) bool { 71 err, ok := e.(*routerError) 72 if !ok { 73 return false 74 } 75 76 for _, code := range codes { 77 if err.code == code { 78 return true 79 } 80 } 81 82 return false 83 }