github.com/aavshr/aws-sdk-go@v1.41.3/internal/s3shared/s3err/error.go (about)

     1  package s3err
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/aavshr/aws-sdk-go/aws/awserr"
     7  	"github.com/aavshr/aws-sdk-go/aws/request"
     8  )
     9  
    10  // RequestFailure provides additional S3 specific metadata for the request
    11  // failure.
    12  type RequestFailure struct {
    13  	awserr.RequestFailure
    14  
    15  	hostID string
    16  }
    17  
    18  // NewRequestFailure returns a request failure error decordated with S3
    19  // specific metadata.
    20  func NewRequestFailure(err awserr.RequestFailure, hostID string) *RequestFailure {
    21  	return &RequestFailure{RequestFailure: err, hostID: hostID}
    22  }
    23  
    24  func (r RequestFailure) Error() string {
    25  	extra := fmt.Sprintf("status code: %d, request id: %s, host id: %s",
    26  		r.StatusCode(), r.RequestID(), r.hostID)
    27  	return awserr.SprintError(r.Code(), r.Message(), extra, r.OrigErr())
    28  }
    29  func (r RequestFailure) String() string {
    30  	return r.Error()
    31  }
    32  
    33  // HostID returns the HostID request response value.
    34  func (r RequestFailure) HostID() string {
    35  	return r.hostID
    36  }
    37  
    38  // RequestFailureWrapperHandler returns a handler to rap an
    39  // awserr.RequestFailure with the  S3 request ID 2 from the response.
    40  func RequestFailureWrapperHandler() request.NamedHandler {
    41  	return request.NamedHandler{
    42  		Name: "awssdk.s3.errorHandler",
    43  		Fn: func(req *request.Request) {
    44  			reqErr, ok := req.Error.(awserr.RequestFailure)
    45  			if !ok || reqErr == nil {
    46  				return
    47  			}
    48  
    49  			hostID := req.HTTPResponse.Header.Get("X-Amz-Id-2")
    50  			if req.Error == nil {
    51  				return
    52  			}
    53  
    54  			req.Error = NewRequestFailure(reqErr, hostID)
    55  		},
    56  	}
    57  }