1package s3shared 2 3import ( 4 "fmt" 5 6 "github.com/aws/aws-sdk-go-v2/service/internal/s3shared/arn" 7) 8 9// TODO: fix these error statements to be relevant to v2 sdk 10 11const ( 12 invalidARNErrorErrCode = "InvalidARNError" 13 configurationErrorErrCode = "ConfigurationError" 14) 15 16// InvalidARNError denotes the error for Invalid ARN 17type InvalidARNError struct { 18 message string 19 resource arn.Resource 20 origErr error 21} 22 23// Error returns the InvalidARN error string 24func (e InvalidARNError) Error() string { 25 var extra string 26 if e.resource != nil { 27 extra = "ARN: " + e.resource.String() 28 } 29 msg := invalidARNErrorErrCode + " : " + e.message 30 if extra != "" { 31 msg = msg + "\n\t" + extra 32 } 33 34 return msg 35} 36 37// OrigErr is the original error wrapped by Invalid ARN Error 38func (e InvalidARNError) Unwrap() error { 39 return e.origErr 40} 41 42// NewInvalidARNError denotes invalid arn error 43func NewInvalidARNError(resource arn.Resource, err error) InvalidARNError { 44 return InvalidARNError{ 45 message: "invalid ARN", 46 origErr: err, 47 resource: resource, 48 } 49} 50 51// NewInvalidARNWithUnsupportedPartitionError ARN not supported for the target partition 52func NewInvalidARNWithUnsupportedPartitionError(resource arn.Resource, err error) InvalidARNError { 53 return InvalidARNError{ 54 message: "resource ARN not supported for the target ARN partition", 55 origErr: err, 56 resource: resource, 57 } 58} 59 60// NewInvalidARNWithFIPSError ARN not supported for FIPS region 61func NewInvalidARNWithFIPSError(resource arn.Resource, err error) InvalidARNError { 62 return InvalidARNError{ 63 message: "resource ARN not supported for FIPS region", 64 resource: resource, 65 origErr: err, 66 } 67} 68 69// ConfigurationError is used to denote a client configuration error 70type ConfigurationError struct { 71 message string 72 resource arn.Resource 73 clientPartitionID string 74 clientRegion string 75 origErr error 76} 77 78// Error returns the Configuration error string 79func (e ConfigurationError) Error() string { 80 extra := fmt.Sprintf("ARN: %s, client partition: %s, client region: %s", 81 e.resource, e.clientPartitionID, e.clientRegion) 82 83 msg := configurationErrorErrCode + " : " + e.message 84 if extra != "" { 85 msg = msg + "\n\t" + extra 86 } 87 return msg 88} 89 90// OrigErr is the original error wrapped by Configuration Error 91func (e ConfigurationError) Unwrap() error { 92 return e.origErr 93} 94 95// NewClientPartitionMismatchError stub 96func NewClientPartitionMismatchError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 97 return ConfigurationError{ 98 message: "client partition does not match provided ARN partition", 99 origErr: err, 100 resource: resource, 101 clientPartitionID: clientPartitionID, 102 clientRegion: clientRegion, 103 } 104} 105 106// NewClientRegionMismatchError denotes cross region access error 107func NewClientRegionMismatchError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 108 return ConfigurationError{ 109 message: "client region does not match provided ARN region", 110 origErr: err, 111 resource: resource, 112 clientPartitionID: clientPartitionID, 113 clientRegion: clientRegion, 114 } 115} 116 117// NewFailedToResolveEndpointError denotes endpoint resolving error 118func NewFailedToResolveEndpointError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 119 return ConfigurationError{ 120 message: "endpoint resolver failed to find an endpoint for the provided ARN region", 121 origErr: err, 122 resource: resource, 123 clientPartitionID: clientPartitionID, 124 clientRegion: clientRegion, 125 } 126} 127 128// NewClientConfiguredForFIPSError denotes client config error for unsupported cross region FIPS access 129func NewClientConfiguredForFIPSError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 130 return ConfigurationError{ 131 message: "client configured for fips but cross-region resource ARN provided", 132 origErr: err, 133 resource: resource, 134 clientPartitionID: clientPartitionID, 135 clientRegion: clientRegion, 136 } 137} 138 139// NewClientConfiguredForAccelerateError denotes client config error for unsupported S3 accelerate 140func NewClientConfiguredForAccelerateError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 141 return ConfigurationError{ 142 message: "client configured for S3 Accelerate but is not supported with resource ARN", 143 origErr: err, 144 resource: resource, 145 clientPartitionID: clientPartitionID, 146 clientRegion: clientRegion, 147 } 148} 149 150// NewClientConfiguredForCrossRegionFIPSError denotes client config error for unsupported cross region FIPS request 151func NewClientConfiguredForCrossRegionFIPSError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 152 return ConfigurationError{ 153 message: "client configured for FIPS with cross-region enabled but is supported with cross-region resource ARN", 154 origErr: err, 155 resource: resource, 156 clientPartitionID: clientPartitionID, 157 clientRegion: clientRegion, 158 } 159} 160 161// NewClientConfiguredForDualStackError denotes client config error for unsupported S3 Dual-stack 162func NewClientConfiguredForDualStackError(resource arn.Resource, clientPartitionID, clientRegion string, err error) ConfigurationError { 163 return ConfigurationError{ 164 message: "client configured for S3 Dual-stack but is not supported with resource ARN", 165 origErr: err, 166 resource: resource, 167 clientPartitionID: clientPartitionID, 168 clientRegion: clientRegion, 169 } 170} 171