1package azblob
2
3import (
4	"context"
5
6	"github.com/Azure/azure-pipeline-go/pipeline"
7)
8
9// NewUniqueRequestIDPolicyFactory creates a UniqueRequestIDPolicyFactory object
10// that sets the request's x-ms-client-request-id header if it doesn't already exist.
11func NewUniqueRequestIDPolicyFactory() pipeline.Factory {
12	return pipeline.FactoryFunc(func(next pipeline.Policy, po *pipeline.PolicyOptions) pipeline.PolicyFunc {
13		// This is Policy's Do method:
14		return func(ctx context.Context, request pipeline.Request) (pipeline.Response, error) {
15			id := request.Header.Get(xMsClientRequestID)
16			if id == "" { // Add a unique request ID if the caller didn't specify one already
17				request.Header.Set(xMsClientRequestID, newUUID().String())
18			}
19			return next.Do(ctx, request)
20		}
21	})
22}
23
24const xMsClientRequestID = "x-ms-client-request-id"
25