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  }