src

Go monorepo.
git clone git://code.dwrz.net/src
Log | Files | Refs

request_id_retriever.go (1671B)


      1 package middleware
      2 
      3 import (
      4 	"context"
      5 
      6 	"github.com/aws/smithy-go/middleware"
      7 	smithyhttp "github.com/aws/smithy-go/transport/http"
      8 )
      9 
     10 // AddRequestIDRetrieverMiddleware adds request id retriever middleware
     11 func AddRequestIDRetrieverMiddleware(stack *middleware.Stack) error {
     12 	// add error wrapper middleware before operation deserializers so that it can wrap the error response
     13 	// returned by operation deserializers
     14 	return stack.Deserialize.Insert(&RequestIDRetriever{}, "OperationDeserializer", middleware.Before)
     15 }
     16 
     17 // RequestIDRetriever middleware captures the AWS service request ID from the
     18 // raw response.
     19 type RequestIDRetriever struct {
     20 }
     21 
     22 // ID returns the middleware identifier
     23 func (m *RequestIDRetriever) ID() string {
     24 	return "RequestIDRetriever"
     25 }
     26 
     27 // HandleDeserialize pulls the AWS request ID from the response, storing it in
     28 // operation metadata.
     29 func (m *RequestIDRetriever) HandleDeserialize(ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) (
     30 	out middleware.DeserializeOutput, metadata middleware.Metadata, err error,
     31 ) {
     32 	out, metadata, err = next.HandleDeserialize(ctx, in)
     33 
     34 	resp, ok := out.RawResponse.(*smithyhttp.Response)
     35 	if !ok {
     36 		// No raw response to wrap with.
     37 		return out, metadata, err
     38 	}
     39 
     40 	// Different header which can map to request id
     41 	requestIDHeaderList := []string{"X-Amzn-Requestid", "X-Amz-RequestId"}
     42 
     43 	for _, h := range requestIDHeaderList {
     44 		// check for headers known to contain Request id
     45 		if v := resp.Header.Get(h); len(v) != 0 {
     46 			// set reqID on metadata for successful responses.
     47 			SetRequestIDMetadata(&metadata, v)
     48 			break
     49 		}
     50 	}
     51 
     52 	return out, metadata, err
     53 }