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 }