go/protocol/errors/errors.go (97 lines of code) (raw):
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
package errors
import "time"
type (
// Kind defines the type of protocol error being thrown.
Kind interface {
String() string
// Force only internal implementations.
kind()
}
// Client represents a purely client-side error.
Client struct {
Message string
Kind Kind
Nested error
Shallow bool
}
// Remote represents an error that is sent between services over the wire.
Remote struct {
Message string
Kind Kind
}
// Timeout errors indicate that the operation was aborted due to timeout.
Timeout struct {
TimeoutName string
TimeoutValue time.Duration
}
// Cancellation errors indicate that the operation was canceled.
Cancellation struct{}
// ConfigurationInvalid errors indicate that a provided configuration value
// or argument is invalid.
ConfigurationInvalid struct {
PropertyName string
PropertyValue any
}
// MqttError errors indicate that the MQTT communication encountered an
// error and failed.
MqttError struct{}
// HeaderMissing errors indicate that a required MQTT header property is
// missing from the received message.
HeaderMissing struct {
HeaderName string
}
// HeaderInvalid errors indicate that an MQTT header property is has an
// invalid value in the received message.
HeaderInvalid struct {
HeaderName string
HeaderValue string
}
// PayloadInvalid errors indicate that the MQTT payload cannot be
// serialized/deserialized.
PayloadInvalid struct{}
// StateInvalid errors indicate that the current program state is invalid
// relative to the method that was called.
StateInvalid struct {
PropertyName string
}
// InternalLogicError errors indicate that the client or service observed a
// condition that was thought to be impossible.
InternalLogicError struct {
// Deprecated: Only for wire protocol compat.
PropertyName string
}
// UnknownError errors indicate that the client or service received an
// unexpected error from a dependent component.
UnknownError struct {
// Deprecated: Only for schemaregistry compat.
PropertyName string
// Deprecated: Only for schemaregistry compat.
PropertyValue any
}
// ExecutionError errors indicate that the command processor encountered an
// error while executing the command.
ExecutionError struct{}
// UnsupportedVersion errors indicate that the command processor or receiver
// doesn't support the provided protocol version.
UnsupportedVersion struct {
ProtocolVersion string
SupportedMajorProtocolVersions []int
}
)
func (e *Client) Error() string {
return e.Message
}
func (e *Client) Unwrap() error {
return e.Nested
}
func (e *Remote) Error() string {
return e.Message
}
// IsKind is a shorthand to check if an error is of kind K.
func IsKind[K Kind](err error) (K, bool) {
switch e := err.(type) {
case *Client:
k, ok := e.Kind.(K)
return k, ok
case *Remote:
k, ok := e.Kind.(K)
return k, ok
default:
var k K
return k, false
}
}
func (Timeout) kind() {}
func (Cancellation) kind() {}
func (ConfigurationInvalid) kind() {}
func (MqttError) kind() {}
func (HeaderMissing) kind() {}
func (HeaderInvalid) kind() {}
func (PayloadInvalid) kind() {}
func (StateInvalid) kind() {}
func (InternalLogicError) kind() {}
func (UnknownError) kind() {}
func (ExecutionError) kind() {}
func (UnsupportedVersion) kind() {}
func (Timeout) String() string { return "timeout" }
func (Cancellation) String() string { return "cancellation" }
func (ConfigurationInvalid) String() string { return "invalid configuration" }
func (MqttError) String() string { return "mqtt error" }
func (HeaderMissing) String() string { return "missing header" }
func (HeaderInvalid) String() string { return "invalid header" }
func (PayloadInvalid) String() string { return "invalid payload" }
func (StateInvalid) String() string { return "invalid state" }
func (InternalLogicError) String() string { return "internal logic error" }
func (UnknownError) String() string { return "unknown error" }
func (ExecutionError) String() string { return "execution error" }
func (UnsupportedVersion) String() string { return "unsupported version" }