internal static RegenerateStorageAccountKeysInfo Create(StorageAccountKeyType keyType)
 {
     return new RegenerateStorageAccountKeysInfo
     {
         KeyType = keyType
     };
 }
        /// <summary>
        /// Begins and asyncrounous operation to regenerate one of the storage account keys.
        /// </summary>
        /// <param name="storageAccountName">The name of the storage account.</param>
        /// <param name="keyType">Which storage account key to regenerate.</param>
        /// <param name="token">An optional <see cref="CancellationToken"/>.</param>
        /// <returns>A <see cref="Task"/> which returns a new <see cref="StorageAccountKeys"/> object.</returns>
        public Task<StorageAccountKeys> RegenerateStorageAccountKeys(string storageAccountName, StorageAccountKeyType keyType, CancellationToken token = default(CancellationToken))
        {
            Validation.ValidateStorageAccountName(storageAccountName);

            RegenerateStorageAccountKeysInfo info = RegenerateStorageAccountKeysInfo.Create(keyType);

            HttpRequestMessage message = CreateBaseMessage(HttpMethod.Post, CreateTargetUri(UriFormatStrings.RegenerateStorageAccountKeys, storageAccountName), info);

            //while this, clearly, is not a get operation, it returns a custom datacontract
            //so we can use the StartGetTask method to get the right return value
            return StartGetTask<StorageAccountKeys>(message, token);
        }