1 package smithy
2 3 import "fmt"
4 5 // APIError provides the generic API and protocol agnostic error type all SDK
6 // generated exception types will implement.
7 type 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.
21 type GenericAPIError struct {
22 Code string
23 Message string
24 Fault ErrorFault
25 }
26 27 // ErrorCode returns the error code for the API exception.
28 func (e *GenericAPIError) ErrorCode() string { return e.Code }
29 30 // ErrorMessage returns the error message for the API exception.
31 func (e *GenericAPIError) ErrorMessage() string { return e.Message }
32 33 // ErrorFault returns the fault for the API exception.
34 func (e *GenericAPIError) ErrorFault() ErrorFault { return e.Fault }
35 36 func (e *GenericAPIError) Error() string {
37 return fmt.Sprintf("api error %s: %s", e.Code, e.Message)
38 }
39 40 var _ APIError = (*GenericAPIError)(nil)
41 42 // OperationError decorates an underlying error which occurred while invoking
43 // an operation with names of the operation and API.
44 type 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.
51 func (e *OperationError) Service() string { return e.ServiceID }
52 53 // Operation returns the name of the API operation the error occurred with.
54 func (e *OperationError) Operation() string { return e.OperationName }
55 56 // Unwrap returns the nested error if any, or nil.
57 func (e *OperationError) Unwrap() error { return e.Err }
58 59 func (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.
65 type DeserializationError struct {
66 Err error // original error
67 Snapshot []byte
68 }
69 70 // Error returns a formatted error for DeserializationError
71 func (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
80 func (e *DeserializationError) Unwrap() error { return e.Err }
81 82 // ErrorFault provides the type for a Smithy API error fault.
83 type ErrorFault int
84 85 // ErrorFault enumeration values
86 const (
87 FaultUnknown ErrorFault = iota
88 FaultServer
89 FaultClient
90 )
91 92 func (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
104 type SerializationError struct {
105 Err error // original error
106 }
107 108 // Error returns a formatted error for SerializationError
109 func (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
118 func (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.
123 type CanceledError struct {
124 Err error
125 }
126 127 // CanceledError returns true to satisfy interfaces checking for canceled errors.
128 func (*CanceledError) CanceledError() bool { return true }
129 130 // Unwrap returns the underlying error, if there was one.
131 func (e *CanceledError) Unwrap() error {
132 return e.Err
133 }
134 135 func (e *CanceledError) Error() string {
136 return fmt.Sprintf("canceled, %v", e.Err)
137 }
138