errors.go

  1package smithy
  2
  3import "fmt"
  4
  5// APIError provides the generic API and protocol agnostic error type all SDK
  6// generated exception types will implement.
  7type APIError interface {
  8	error
  9
 10	// ErrorCode returns the error code for the API exception.
 11	ErrorCode() string
 12	// ErrorMessage returns the error message for the API exception.
 13	ErrorMessage() string
 14	// ErrorFault returns the fault for the API exception.
 15	ErrorFault() ErrorFault
 16}
 17
 18// GenericAPIError provides a generic concrete API error type that SDKs can use
 19// to deserialize error responses into. Should be used for unmodeled or untyped
 20// errors.
 21type GenericAPIError struct {
 22	Code    string
 23	Message string
 24	Fault   ErrorFault
 25}
 26
 27// ErrorCode returns the error code for the API exception.
 28func (e *GenericAPIError) ErrorCode() string { return e.Code }
 29
 30// ErrorMessage returns the error message for the API exception.
 31func (e *GenericAPIError) ErrorMessage() string { return e.Message }
 32
 33// ErrorFault returns the fault for the API exception.
 34func (e *GenericAPIError) ErrorFault() ErrorFault { return e.Fault }
 35
 36func (e *GenericAPIError) Error() string {
 37	return fmt.Sprintf("api error %s: %s", e.Code, e.Message)
 38}
 39
 40var _ APIError = (*GenericAPIError)(nil)
 41
 42// OperationError decorates an underlying error which occurred while invoking
 43// an operation with names of the operation and API.
 44type OperationError struct {
 45	ServiceID     string
 46	OperationName string
 47	Err           error
 48}
 49
 50// Service returns the name of the API service the error occurred with.
 51func (e *OperationError) Service() string { return e.ServiceID }
 52
 53// Operation returns the name of the API operation the error occurred with.
 54func (e *OperationError) Operation() string { return e.OperationName }
 55
 56// Unwrap returns the nested error if any, or nil.
 57func (e *OperationError) Unwrap() error { return e.Err }
 58
 59func (e *OperationError) Error() string {
 60	return fmt.Sprintf("operation error %s: %s, %v", e.ServiceID, e.OperationName, e.Err)
 61}
 62
 63// DeserializationError provides a wrapper for an error that occurs during
 64// deserialization.
 65type DeserializationError struct {
 66	Err      error //  original error
 67	Snapshot []byte
 68}
 69
 70// Error returns a formatted error for DeserializationError
 71func (e *DeserializationError) Error() string {
 72	const msg = "deserialization failed"
 73	if e.Err == nil {
 74		return msg
 75	}
 76	return fmt.Sprintf("%s, %v", msg, e.Err)
 77}
 78
 79// Unwrap returns the underlying Error in DeserializationError
 80func (e *DeserializationError) Unwrap() error { return e.Err }
 81
 82// ErrorFault provides the type for a Smithy API error fault.
 83type ErrorFault int
 84
 85// ErrorFault enumeration values
 86const (
 87	FaultUnknown ErrorFault = iota
 88	FaultServer
 89	FaultClient
 90)
 91
 92func (f ErrorFault) String() string {
 93	switch f {
 94	case FaultServer:
 95		return "server"
 96	case FaultClient:
 97		return "client"
 98	default:
 99		return "unknown"
100	}
101}
102
103// SerializationError represents an error that occurred while attempting to serialize a request
104type SerializationError struct {
105	Err error // original error
106}
107
108// Error returns a formatted error for SerializationError
109func (e *SerializationError) Error() string {
110	const msg = "serialization failed"
111	if e.Err == nil {
112		return msg
113	}
114	return fmt.Sprintf("%s: %v", msg, e.Err)
115}
116
117// Unwrap returns the underlying Error in SerializationError
118func (e *SerializationError) Unwrap() error { return e.Err }
119
120// CanceledError is the error that will be returned by an API request that was
121// canceled. API operations given a Context may return this error when
122// canceled.
123type CanceledError struct {
124	Err error
125}
126
127// CanceledError returns true to satisfy interfaces checking for canceled errors.
128func (*CanceledError) CanceledError() bool { return true }
129
130// Unwrap returns the underlying error, if there was one.
131func (e *CanceledError) Unwrap() error {
132	return e.Err
133}
134
135func (e *CanceledError) Error() string {
136	return fmt.Sprintf("canceled, %v", e.Err)
137}