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}