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)
}