package s3shared

import (
	

	awsmiddleware 
	
	smithyhttp 
)

const metadataRetrieverID = "S3MetadataRetriever"

// AddMetadataRetrieverMiddleware adds request id, host id retriever middleware
func ( *middleware.Stack) error {
	// add metadata retriever middleware before operation deserializers so that it can retrieve metadata such as
	// host id, request id from response header returned by operation deserializers
	return .Deserialize.Insert(&metadataRetriever{}, "OperationDeserializer", middleware.Before)
}

type metadataRetriever struct {
}

// ID returns the middleware identifier
func ( *metadataRetriever) () string {
	return metadataRetrieverID
}

func ( *metadataRetriever) ( context.Context,  middleware.DeserializeInput,  middleware.DeserializeHandler) (
	 middleware.DeserializeOutput,  middleware.Metadata,  error,
) {
	, ,  = .HandleDeserialize(, )

	,  := .RawResponse.(*smithyhttp.Response)
	if ! {
		// No raw response to wrap with.
		return , , 
	}

	// check for header for Request id
	if  := .Header.Get("X-Amz-Request-Id"); len() != 0 {
		// set reqID on metadata for successful responses.
		awsmiddleware.SetRequestIDMetadata(&, )
	}

	// look up host-id
	if  := .Header.Get("X-Amz-Id-2"); len() != 0 {
		// set reqID on metadata for successful responses.
		SetHostIDMetadata(&, )
	}

	return , , 
}