35 lines
1.0 KiB
Go
35 lines
1.0 KiB
Go
//go:build go1.16
|
|
// +build go1.16
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
package runtime
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azcore/internal/shared"
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
|
|
)
|
|
|
|
// includeResponsePolicy creates a policy that retrieves the raw HTTP response upon request
|
|
func includeResponsePolicy(req *policy.Request) (*http.Response, error) {
|
|
resp, err := req.Next()
|
|
if resp == nil {
|
|
return resp, err
|
|
}
|
|
if httpOutRaw := req.Raw().Context().Value(shared.CtxIncludeResponseKey{}); httpOutRaw != nil {
|
|
httpOut := httpOutRaw.(**http.Response)
|
|
*httpOut = resp
|
|
}
|
|
return resp, err
|
|
}
|
|
|
|
// WithCaptureResponse applies the HTTP response retrieval annotation to the parent context.
|
|
// The resp parameter will contain the HTTP response after the request has completed.
|
|
func WithCaptureResponse(parent context.Context, resp **http.Response) context.Context {
|
|
return context.WithValue(parent, shared.CtxIncludeResponseKey{}, resp)
|
|
}
|