internal HttpMessage CreateSetAccessTierRequest(string containerName, string blob, BatchAccessTier tier, int?timeout, BatchRehydratePriority?rehydratePriority, string leaseId, string ifTags)
        {
            var message = _pipeline.CreateMessage();
            var request = message.Request;

            request.Method = RequestMethod.Put;
            var uri = new RawRequestUriBuilder();

            uri.AppendRaw(_url, false);
            uri.AppendPath("/", false);
            uri.AppendPath(containerName, false);
            uri.AppendPath("/", false);
            uri.AppendPath(blob, false);
            uri.AppendQuery("comp", "tier", true);
            if (_snapshot != null)
            {
                uri.AppendQuery("snapshot", _snapshot, true);
            }
            if (_versionId != null)
            {
                uri.AppendQuery("versionid", _versionId, true);
            }
            if (timeout != null)
            {
                uri.AppendQuery("timeout", timeout.Value, true);
            }
            request.Uri = uri;
            request.Headers.Add("x-ms-access-tier", tier.ToString());
            if (rehydratePriority != null)
            {
                request.Headers.Add("x-ms-rehydrate-priority", rehydratePriority.Value.ToString());
            }
            request.Headers.Add("x-ms-version", _version);
            if (leaseId != null)
            {
                request.Headers.Add("x-ms-lease-id", leaseId);
            }
            if (ifTags != null)
            {
                request.Headers.Add("x-ms-if-tags", ifTags);
            }
            request.Headers.Add("Accept", "application/xml");
            return(message);
        }
        public ResponseWithHeaders <BlobSetAccessTierHeaders> SetAccessTier(string containerName, string blob, BatchAccessTier tier, int?timeout = null, BatchRehydratePriority?rehydratePriority = null, string leaseId = null, string ifTags = null, CancellationToken cancellationToken = default)
        {
            if (containerName == null)
            {
                throw new ArgumentNullException(nameof(containerName));
            }
            if (blob == null)
            {
                throw new ArgumentNullException(nameof(blob));
            }

            using var message = CreateSetAccessTierRequest(containerName, blob, tier, timeout, rehydratePriority, leaseId, ifTags);
            _pipeline.Send(message, cancellationToken);
            var headers = new BlobSetAccessTierHeaders(message.Response);

            switch (message.Response.Status)
            {
            case 200:
            case 202:
                return(ResponseWithHeaders.FromValue(headers, message.Response));

            default:
                throw ClientDiagnostics.CreateRequestFailedException(message.Response);
            }
        }