vspd/types/errors.go
Jamie Holdstock ed1fac1a2a
Add types module for API requests/responses/errors. (#356)
* Remove helper func getCommitmentAddress.

This function is only used in one place so removing it does not introduce any duplication. Removing the func also removes the need for errors.Is comparison, which will be very useful in upcoming changes.

* Rename apiError to ErrorCode.

* Don't use inline type for API errors.

* Export webapi errors.

* Export webapi request/responses.

* Add types module for API requests/responses/errors
2022-11-18 15:06:47 -05:00

121 lines
3.1 KiB
Go

// Copyright (c) 2020-2022 The Decred developers
// Use of this source code is governed by an ISC
// license that can be found in the LICENSE file.
package types
import "net/http"
// ErrorCode is an integer which represents a kind of error which may be
// encountered by vspd.
type ErrorCode int64
const (
ErrBadRequest ErrorCode = iota
ErrInternalError
ErrVspClosed
ErrFeeAlreadyReceived
ErrInvalidFeeTx
ErrFeeTooSmall
ErrUnknownTicket
ErrTicketCannotVote
ErrFeeExpired
ErrInvalidVoteChoices
ErrBadSignature
ErrInvalidPrivKey
ErrFeeNotReceived
ErrInvalidTicket
ErrCannotBroadcastTicket
ErrCannotBroadcastFee
ErrCannotBroadcastFeeUnknownOutputs
ErrInvalidTimestamp
)
// HTTPStatus returns a corresponding HTTP status code for a given error code.
func (e ErrorCode) HTTPStatus() int {
switch e {
case ErrBadRequest:
return http.StatusBadRequest
case ErrInternalError:
return http.StatusInternalServerError
case ErrVspClosed:
return http.StatusBadRequest
case ErrFeeAlreadyReceived:
return http.StatusBadRequest
case ErrInvalidFeeTx:
return http.StatusBadRequest
case ErrFeeTooSmall:
return http.StatusBadRequest
case ErrUnknownTicket:
return http.StatusBadRequest
case ErrTicketCannotVote:
return http.StatusBadRequest
case ErrFeeExpired:
return http.StatusBadRequest
case ErrInvalidVoteChoices:
return http.StatusBadRequest
case ErrBadSignature:
return http.StatusBadRequest
case ErrInvalidPrivKey:
return http.StatusBadRequest
case ErrFeeNotReceived:
return http.StatusBadRequest
case ErrInvalidTicket:
return http.StatusBadRequest
case ErrCannotBroadcastTicket:
return http.StatusInternalServerError
case ErrCannotBroadcastFee:
return http.StatusInternalServerError
case ErrCannotBroadcastFeeUnknownOutputs:
return http.StatusPreconditionRequired
case ErrInvalidTimestamp:
return http.StatusBadRequest
default:
return http.StatusInternalServerError
}
}
// DefaultMessage returns a descriptive error string for a given error code.
func (e ErrorCode) DefaultMessage() string {
switch e {
case ErrBadRequest:
return "bad request"
case ErrInternalError:
return "internal error"
case ErrVspClosed:
return "vsp is closed"
case ErrFeeAlreadyReceived:
return "fee tx already received for ticket"
case ErrInvalidFeeTx:
return "invalid fee tx"
case ErrFeeTooSmall:
return "fee too small"
case ErrUnknownTicket:
return "unknown ticket"
case ErrTicketCannotVote:
return "ticket not eligible to vote"
case ErrFeeExpired:
return "fee has expired"
case ErrInvalidVoteChoices:
return "invalid vote choices"
case ErrBadSignature:
return "bad request signature"
case ErrInvalidPrivKey:
return "invalid private key"
case ErrFeeNotReceived:
return "no fee tx received for ticket"
case ErrInvalidTicket:
return "not a valid ticket tx"
case ErrCannotBroadcastTicket:
return "ticket transaction could not be broadcast"
case ErrCannotBroadcastFee:
return "fee transaction could not be broadcast"
case ErrCannotBroadcastFeeUnknownOutputs:
return "fee transaction could not be broadcast due to unknown outputs"
case ErrInvalidTimestamp:
return "old or reused timestamp"
default:
return "unknown error"
}
}