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  }