func deserializeMiddleware()

in instrumentation/awsv2/awsv2.go [59:98]


func deserializeMiddleware(stack *middleware.Stack) error {
	return stack.Deserialize.Add(middleware.DeserializeMiddlewareFunc("XRayDeserializeMiddleware", func(
		ctx context.Context, in middleware.DeserializeInput, next middleware.DeserializeHandler) (
		out middleware.DeserializeOutput, metadata middleware.Metadata, err error) {

		subseg, ok := ctx.Value(awsV2SubsegmentKey{}).(*xray.Segment)
		if !ok {
			return next.HandleDeserialize(ctx, in)
		}

		in.Request.(*smithyhttp.Request).Header.Set(xray.TraceIDHeaderKey, subseg.DownstreamHeader().String())

		out, metadata, err = next.HandleDeserialize(ctx, in)

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

		// Lock subseg before updating
		subseg.Lock()

		subseg.GetHTTP().GetResponse().ContentLength = int(resp.ContentLength)
		requestID, ok := v2Middleware.GetRequestIDMetadata(metadata)

		if ok {
			subseg.GetAWS()[RequestIDKey] = requestID
		}
		if extendedRequestID := resp.Header.Get(S3ExtendedRequestIDHeaderKey); extendedRequestID != "" {
			subseg.GetAWS()[ExtendedRequestIDKey] = extendedRequestID
		}

		subseg.Unlock()

		xray.HttpCaptureResponse(subseg, resp.StatusCode)
		return out, metadata, err
	}),
		middleware.Before)
}