github.com/aavshr/aws-sdk-go@v1.41.3/internal/s3shared/endpoint_errors.go (about) 1 package s3shared 2 3 import ( 4 "fmt" 5 6 "github.com/aavshr/aws-sdk-go/aws/awserr" 7 "github.com/aavshr/aws-sdk-go/internal/s3shared/arn" 8 ) 9 10 const ( 11 invalidARNErrorErrCode = "InvalidARNError" 12 configurationErrorErrCode = "ConfigurationError" 13 ) 14 15 // InvalidARNError denotes the error for Invalid ARN 16 type InvalidARNError struct { 17 message string 18 resource arn.Resource 19 origErr error 20 } 21 22 // Error returns the InvalidARNError 23 func (e InvalidARNError) Error() string { 24 var extra string 25 if e.resource != nil { 26 extra = "ARN: " + e.resource.String() 27 } 28 return awserr.SprintError(e.Code(), e.Message(), extra, e.origErr) 29 } 30 31 // Code returns the invalid ARN error code 32 func (e InvalidARNError) Code() string { 33 return invalidARNErrorErrCode 34 } 35 36 // Message returns the message for Invalid ARN error 37 func (e InvalidARNError) Message() string { 38 return e.message 39 } 40 41 // OrigErr is the original error wrapped by Invalid ARN Error 42 func (e InvalidARNError) OrigErr() error { 43 return e.origErr 44 } 45 46 // NewInvalidARNError denotes invalid arn error 47 func NewInvalidARNError(resource arn.Resource, err error) InvalidARNError { 48 return InvalidARNError{ 49 message: "invalid ARN", 50 origErr: err, 51 resource: resource, 52 } 53 } 54 55 // NewInvalidARNWithCustomEndpointError ARN not supported for custom clients endpoints 56 func NewInvalidARNWithCustomEndpointError(resource arn.Resource, err error) InvalidARNError { 57 return InvalidARNError{ 58 message: "resource ARN not supported with custom client endpoints", 59 origErr: err, 60 resource: resource, 61 } 62 } 63 64 // NewInvalidARNWithUnsupportedPartitionError ARN not supported for the target partition 65 func NewInvalidARNWithUnsupportedPartitionError(resource arn.Resource, err error) InvalidARNError { 66 return InvalidARNError{ 67 message: "resource ARN not supported for the target ARN partition", 68 origErr: err, 69 resource: resource, 70 } 71 } 72 73 // NewInvalidARNWithFIPSError ARN not supported for FIPS region 74 // 75 // Deprecated: FIPS will not appear in the ARN region component. 76 func NewInvalidARNWithFIPSError(resource arn.Resource, err error) InvalidARNError { 77 return InvalidARNError{ 78 message: "resource ARN not supported for FIPS region", 79 resource: resource, 80 origErr: err, 81 } 82 } 83 84 // ConfigurationError is used to denote a client configuration error 85 type ConfigurationError struct { 86 message string 87 resource arn.Resource 88 clientPartitionID string 89 clientRegion string 90 origErr error 91 } 92 93 // Error returns the Configuration error string 94 func (e ConfigurationError) Error() string { 95 extra := fmt.Sprintf("ARN: %s, client partition: %s, client region: %s", 96 e.resource, e.clientPartitionID, e.clientRegion) 97 98 return awserr.SprintError(e.Code(), e.Message(), extra, e.origErr) 99 } 100 101 // Code returns configuration error's error-code 102 func (e ConfigurationError) Code() string { 103 return configurationErrorErrCode 104 } 105 106 // Message returns the configuration error message 107 func (e ConfigurationError) Message() string { 108 return e.message 109 } 110 111 // OrigErr is the original error wrapped by Configuration Error 112 func (e ConfigurationError) OrigErr() error { 113 return e.origErr 114 } 115 116 // NewClientPartitionMismatchError stub 117 func NewClientPartitionMismatchError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 118 return ConfigurationError{ 119 message: "client partition does not match provided ARN partition", 120 origErr: err, 121 resource: resource, 122 clientPartitionID: clientPartitionID, 123 clientRegion: clientRegion, 124 } 125 } 126 127 // NewClientRegionMismatchError denotes cross region access error 128 func NewClientRegionMismatchError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 129 return ConfigurationError{ 130 message: "client region does not match provided ARN region", 131 origErr: err, 132 resource: resource, 133 clientPartitionID: clientPartitionID, 134 clientRegion: clientRegion, 135 } 136 } 137 138 // NewFailedToResolveEndpointError denotes endpoint resolving error 139 func NewFailedToResolveEndpointError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 140 return ConfigurationError{ 141 message: "endpoint resolver failed to find an endpoint for the provided ARN region", 142 origErr: err, 143 resource: resource, 144 clientPartitionID: clientPartitionID, 145 clientRegion: clientRegion, 146 } 147 } 148 149 // NewClientConfiguredForFIPSError denotes client config error for unsupported cross region FIPS access 150 func NewClientConfiguredForFIPSError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 151 return ConfigurationError{ 152 message: "client configured for fips but cross-region resource ARN provided", 153 origErr: err, 154 resource: resource, 155 clientPartitionID: clientPartitionID, 156 clientRegion: clientRegion, 157 } 158 } 159 160 // NewFIPSConfigurationError denotes a configuration error when a client or request is configured for FIPS 161 func NewFIPSConfigurationError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 162 return ConfigurationError{ 163 message: "use of ARN is not supported when client or request is configured for FIPS", 164 origErr: err, 165 resource: resource, 166 clientPartitionID: clientPartitionID, 167 clientRegion: clientRegion, 168 } 169 } 170 171 // NewClientConfiguredForAccelerateError denotes client config error for unsupported S3 accelerate 172 func NewClientConfiguredForAccelerateError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 173 return ConfigurationError{ 174 message: "client configured for S3 Accelerate but is not supported with resource ARN", 175 origErr: err, 176 resource: resource, 177 clientPartitionID: clientPartitionID, 178 clientRegion: clientRegion, 179 } 180 } 181 182 // NewClientConfiguredForCrossRegionFIPSError denotes client config error for unsupported cross region FIPS request 183 func NewClientConfiguredForCrossRegionFIPSError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 184 return ConfigurationError{ 185 message: "client configured for FIPS with cross-region enabled but is supported with cross-region resource ARN", 186 origErr: err, 187 resource: resource, 188 clientPartitionID: clientPartitionID, 189 clientRegion: clientRegion, 190 } 191 } 192 193 // NewClientConfiguredForDualStackError denotes client config error for unsupported S3 Dual-stack 194 func NewClientConfiguredForDualStackError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 195 return ConfigurationError{ 196 message: "client configured for S3 Dual-stack but is not supported with resource ARN", 197 origErr: err, 198 resource: resource, 199 clientPartitionID: clientPartitionID, 200 clientRegion: clientRegion, 201 } 202 }