azure-service-bus-go/errors.go

107 строки
3.1 KiB
Go

package servicebus
import (
"fmt"
"reflect"
"time"
"github.com/Azure/azure-amqp-common-go/v3/rpc"
"github.com/Azure/go-amqp"
)
// Error Conditions
const (
// Service Bus Errors
errorServerBusy amqp.ErrorCondition = "com.microsoft:server-busy"
errorTimeout amqp.ErrorCondition = "com.microsoft:timeout"
errorOperationCancelled amqp.ErrorCondition = "com.microsoft:operation-cancelled"
errorContainerClose amqp.ErrorCondition = "com.microsoft:container-close"
)
const (
amqpRetryDefaultTimes int = 3
amqpRetryDefaultDelay time.Duration = time.Second
amqpRetryBusyServerDelay time.Duration = 10 * time.Second
)
type (
// ErrMissingField indicates that an expected property was missing from an AMQP message. This should only be
// encountered when there is an error with this library, or the server has altered its behavior unexpectedly.
ErrMissingField string
// ErrMalformedMessage indicates that a message was expected in the form of []byte was not a []byte. This is likely
// a bug and should be reported.
ErrMalformedMessage string
// ErrIncorrectType indicates that type assertion failed. This should only be encountered when there is an error
// with this library, or the server has altered its behavior unexpectedly.
ErrIncorrectType struct {
Key string
ExpectedType reflect.Type
ActualValue interface{}
}
// ErrAMQP indicates that the server communicated an AMQP error with a particular
ErrAMQP rpc.Response
// ErrNoMessages is returned when an operation returned no messages. It is not indicative that there will not be
// more messages in the future.
ErrNoMessages struct{}
// ErrNotFound is returned when an entity is not found (404)
ErrNotFound struct {
EntityPath string
}
// ErrConnectionClosed indicates that the connection has been closed.
ErrConnectionClosed string
)
func (e ErrMissingField) Error() string {
return fmt.Sprintf("missing value %q", string(e))
}
func (e ErrMalformedMessage) Error() string {
return "message was expected in the form of []byte was not a []byte"
}
// NewErrIncorrectType lets you skip using the `reflect` package. Just provide a variable of the desired type as
// 'expected'.
func newErrIncorrectType(key string, expected, actual interface{}) ErrIncorrectType {
return ErrIncorrectType{
Key: key,
ExpectedType: reflect.TypeOf(expected),
ActualValue: actual,
}
}
func (e ErrIncorrectType) Error() string {
return fmt.Sprintf(
"value at %q was expected to be of type %q but was actually of type %q",
e.Key,
e.ExpectedType,
reflect.TypeOf(e.ActualValue))
}
func (e ErrAMQP) Error() string {
return fmt.Sprintf("server says (%d) %s", e.Code, e.Description)
}
func (e ErrNoMessages) Error() string {
return "no messages available"
}
func (e ErrNotFound) Error() string {
return fmt.Sprintf("entity at %s not found", e.EntityPath)
}
// IsErrNotFound returns true if the error argument is an ErrNotFound type
func IsErrNotFound(err error) bool {
_, ok := err.(ErrNotFound)
return ok
}
func (e ErrConnectionClosed) Error() string {
return fmt.Sprintf("the connection has been closed: %s", string(e))
}