SpecializedBlobExtensions
Add easy to discover methods to  BlobContainerClient for
            creating  AppendBlobClient instances.
            
                using Azure.Core.Cryptography;
using Azure.Core.Pipeline;
using Azure.Storage.Blobs.Models;
using Azure.Storage.Cryptography.Models;
using System;
using System.Runtime.CompilerServices;
using System.Threading;
using System.Threading.Tasks;
namespace Azure.Storage.Blobs.Specialized
{
    public static class SpecializedBlobExtensions
    {
        public static AppendBlobClient GetAppendBlobClient(this BlobContainerClient client, string blobName)
        {
            return client.GetAppendBlobClientCore(blobName);
        }
        public static BlobContainerClient GetParentBlobContainerClient(this BlobBaseClient client)
        {
            return client.GetParentBlobContainerClientCore();
        }
        public static BlobBaseClient GetBlobBaseClient(this BlobContainerClient client, string blobName)
        {
            return client.GetBlobBaseClientCore(blobName);
        }
        public static BlobClient WithClientSideEncryptionOptions(this BlobClient client, ClientSideEncryptionOptions clientSideEncryptionOptions)
        {
            return client.WithClientSideEncryptionOptionsCore(clientSideEncryptionOptions);
        }
        public static BlobServiceClient GetParentBlobServiceClient(this BlobContainerClient client)
        {
            return client.GetParentBlobServiceClientCore();
        }
        public static BlobLeaseClient GetBlobLeaseClient(this BlobBaseClient client, string leaseId = null)
        {
            return client.GetBlobLeaseClientCore(leaseId);
        }
        public static BlobLeaseClient GetBlobLeaseClient(this BlobContainerClient client, string leaseId = null)
        {
            return client.GetBlobLeaseClientCore(leaseId);
        }
        public static BlockBlobClient GetBlockBlobClient(this BlobContainerClient client, string blobName)
        {
            return client.GetBlockBlobClientCore(blobName);
        }
        public static PageBlobClient GetPageBlobClient(this BlobContainerClient client, string blobName)
        {
            return client.GetPageBlobClientCore(blobName);
        }
        public static void UpdateClientSideKeyEncryptionKey(this BlobClient client, ClientSideEncryptionOptions encryptionOptionsOverride = null, BlobRequestConditions conditions = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            UpdateClientsideKeyEncryptionKeyInternal(client, encryptionOptionsOverride, conditions, false, cancellationToken).EnsureCompleted();
        }
        [AsyncStateMachine(typeof(<UpdateClientSideKeyEncryptionKeyAsync>d__10))]
        public static Task UpdateClientSideKeyEncryptionKeyAsync(this BlobClient client, ClientSideEncryptionOptions encryptionOptionsOverride = null, BlobRequestConditions conditions = null, CancellationToken cancellationToken = default(CancellationToken))
        {
            <UpdateClientSideKeyEncryptionKeyAsync>d__10 stateMachine = default(<UpdateClientSideKeyEncryptionKeyAsync>d__10);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
            stateMachine.client = client;
            stateMachine.encryptionOptionsOverride = encryptionOptionsOverride;
            stateMachine.conditions = conditions;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<UpdateClientsideKeyEncryptionKeyInternal>d__11))]
        private static Task UpdateClientsideKeyEncryptionKeyInternal(BlobClient client, ClientSideEncryptionOptions encryptionOptionsOverride, BlobRequestConditions conditions, bool async, CancellationToken cancellationToken)
        {
            <UpdateClientsideKeyEncryptionKeyInternal>d__11 stateMachine = default(<UpdateClientsideKeyEncryptionKeyInternal>d__11);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder.Create();
            stateMachine.client = client;
            stateMachine.encryptionOptionsOverride = encryptionOptionsOverride;
            stateMachine.conditions = conditions;
            stateMachine.async = async;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<UnwrapKeyInternal>d__12))]
        private static Task<byte[]> UnwrapKeyInternal(EncryptionData encryptionData, IKeyEncryptionKeyResolver keyResolver, bool async, CancellationToken cancellationToken)
        {
            <UnwrapKeyInternal>d__12 stateMachine = default(<UnwrapKeyInternal>d__12);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<byte[]>.Create();
            stateMachine.encryptionData = encryptionData;
            stateMachine.keyResolver = keyResolver;
            stateMachine.async = async;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
        [AsyncStateMachine(typeof(<WrapKeyInternal>d__13))]
        private static Task<byte[]> WrapKeyInternal(ReadOnlyMemory<byte> contentEncryptionKey, string keyWrapAlgorithm, IKeyEncryptionKey key, bool async, CancellationToken cancellationToken)
        {
            <WrapKeyInternal>d__13 stateMachine = default(<WrapKeyInternal>d__13);
            stateMachine.<>t__builder = AsyncTaskMethodBuilder<byte[]>.Create();
            stateMachine.contentEncryptionKey = contentEncryptionKey;
            stateMachine.keyWrapAlgorithm = keyWrapAlgorithm;
            stateMachine.key = key;
            stateMachine.async = async;
            stateMachine.cancellationToken = cancellationToken;
            stateMachine.<>1__state = -1;
            stateMachine.<>t__builder.Start(ref stateMachine);
            return stateMachine.<>t__builder.Task;
        }
    }
}