Errors
                    class Errors
                
                Create exceptions for common error cases.
            
                using System;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
using System.Security.Authentication;
using System.Security.Cryptography;
namespace Azure.Storage
{
    internal class Errors
    {
        public static class ClientSideEncryption
        {
            public static ArgumentException UnrecognizedVersion()
            {
                return new ArgumentException("Unrecognized ClientSideEncryptionVersion");
            }
            public static InvalidOperationException ClientSideEncryptionVersionNotSupported(string versionString = null)
            {
                return new InvalidOperationException(("This library does not support the given version of client-side encryption." + versionString == null) ? "" : (" Version ID = " + versionString));
            }
            public static InvalidOperationException TypeNotSupported(Type type)
            {
                return new InvalidOperationException("Client-side encryption is not supported for type \"" + type.FullName + "\". Please use a supported client type or create this client without specifying client-side encryption options.");
            }
            public static InvalidOperationException MissingRequiredEncryptionResources(params string[] resourceNames)
            {
                return new InvalidOperationException("Cannot encrypt without specifying " + string.Join(",", resourceNames.AsEnumerable()));
            }
            public static ArgumentException KeyNotFound(string keyId)
            {
                return new ArgumentException("Resolution of id " + keyId + " returned null.");
            }
            public static ArgumentException BadEncryptionAgent(string agent)
            {
                return new ArgumentException("Invalid Encryption Agent. This version of the client library does not understandthe Encryption Agent protocol \"" + agent + "\" set on the blob.");
            }
            public static ArgumentException BadEncryptionAlgorithm(string algorithm)
            {
                return new ArgumentException("Invalid Encryption Algorithm \"" + algorithm + "\" found on the resource. This version of the clientlibrary does not support the given encryption algorithm.");
            }
            public static InvalidOperationException MissingEncryptionMetadata(string field)
            {
                return new InvalidOperationException("Missing field \"" + field + "\" in encryption metadata");
            }
        }
        public static ArgumentException AccountMismatch(string accountNameCredential, string accountNameValue)
        {
            return new ArgumentException(string.Format(CultureInfo.CurrentCulture, "Account Name Mismatch: {0} != {1}", accountNameCredential, accountNameValue));
        }
        public static InvalidOperationException AccountSasMissingData()
        {
            return new InvalidOperationException("Account SAS is missing at least one of these: ExpiryTime, Permissions, Service, or ResourceType");
        }
        public static ArgumentNullException ArgumentNull(string paramName)
        {
            return new ArgumentNullException(paramName);
        }
        public static ArgumentException InvalidArgument(string paramName)
        {
            return new ArgumentException(paramName + " is invalid");
        }
        public static ArgumentException InvalidResourceType(char s)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(25, 1);
            defaultInterpolatedStringHandler.AppendLiteral("Invalid resource type: '");
            defaultInterpolatedStringHandler.AppendFormatted(s);
            defaultInterpolatedStringHandler.AppendLiteral("'");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException TaskIncomplete()
        {
            return new InvalidOperationException("Task is not completed");
        }
        public static FormatException InvalidFormat(string err)
        {
            return new FormatException(err);
        }
        public static ArgumentException ParsingConnectionStringFailed()
        {
            return new ArgumentException("Connection string parsing error");
        }
        public static ArgumentOutOfRangeException InvalidSasProtocol(string protocol, string sasProtocol)
        {
            return new ArgumentOutOfRangeException(protocol, "Invalid " + sasProtocol + " value");
        }
        public static ArgumentException InvalidService(char s)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(19, 1);
            defaultInterpolatedStringHandler.AppendLiteral("Invalid service: '");
            defaultInterpolatedStringHandler.AppendFormatted(s);
            defaultInterpolatedStringHandler.AppendLiteral("'");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentException InsufficientStorageTransferOptions(long streamLength, long statedMaxBlockSize, long necessaryMinBlockSize)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(147, 3);
            defaultInterpolatedStringHandler.AppendLiteral("Cannot transfer ");
            defaultInterpolatedStringHandler.AppendFormatted(streamLength);
            defaultInterpolatedStringHandler.AppendLiteral(" bytes with a maximum transfer size of ");
            defaultInterpolatedStringHandler.AppendFormatted(statedMaxBlockSize);
            defaultInterpolatedStringHandler.AppendLiteral(" bytes per block. Please increase the TransferOptions.MaximumTransferChunkSize to at least ");
            defaultInterpolatedStringHandler.AppendFormatted(necessaryMinBlockSize);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidDataException HashMismatch(string hashHeaderName)
        {
            return new InvalidDataException(hashHeaderName + " did not match hash of recieved data.");
        }
        public static InvalidDataException ChecksumMismatch(ReadOnlySpan<byte> left, ReadOnlySpan<byte> right)
        {
            return new InvalidDataException("Compared checksums did not match. Invalid data may have been written to the destination. Left: " + Convert.ToBase64String(left, Base64FormattingOptions.None) + " Right: " + Convert.ToBase64String(right, Base64FormattingOptions.None));
        }
        public static InvalidDataException HashMismatchOnStreamedDownload(string mismatchedRange)
        {
            return new InvalidDataException("Detected invalid data while streaming to the destination. Range " + mismatchedRange + " produced mismatched checksum.");
        }
        public static ArgumentException PrecalculatedHashNotSupportedOnSplit()
        {
            return new ArgumentException("Precalculated checksum not supported when potentially partitioning an upload.");
        }
        public static ArgumentException CannotDeferTransactionalHashVerification()
        {
            return new ArgumentException("Cannot defer transactional hash verification. Returned hash is unavailable to caller.");
        }
        public static ArgumentException CannotInitializeWriteStreamWithData()
        {
            return new ArgumentException("Initialized buffer for StorageWriteStream must be empty.");
        }
        internal static void VerifyStreamPosition(Stream stream, string streamName)
        {
            if (stream != null && stream.CanSeek && stream.Length > 0 && stream.Position >= stream.Length) {
                DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(71, 6);
                defaultInterpolatedStringHandler.AppendFormatted(streamName);
                defaultInterpolatedStringHandler.AppendLiteral(".");
                defaultInterpolatedStringHandler.AppendFormatted("Position");
                defaultInterpolatedStringHandler.AppendLiteral(" must be less than ");
                defaultInterpolatedStringHandler.AppendFormatted(streamName);
                defaultInterpolatedStringHandler.AppendLiteral(".");
                defaultInterpolatedStringHandler.AppendFormatted("Length");
                defaultInterpolatedStringHandler.AppendLiteral(". Please set ");
                defaultInterpolatedStringHandler.AppendFormatted(streamName);
                defaultInterpolatedStringHandler.AppendLiteral(".");
                defaultInterpolatedStringHandler.AppendFormatted("Position");
                defaultInterpolatedStringHandler.AppendLiteral(" to the start of the data to upload.");
                throw new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
            }
        }
        public static void ThrowIfParamNull(object obj, string paramName)
        {
            if (obj == null)
                throw new ArgumentNullException("Param: \"" + paramName + "\" is null");
        }
        internal static void CheckCryptKeySize(int keySizeInBytes)
        {
            if (keySizeInBytes != 16 && keySizeInBytes != 24 && keySizeInBytes != 32)
                throw new CryptographicException("Specified key is not a valid size for this algorithm.");
        }
        public static CryptographicException CryptographyAuthTagMismatch()
        {
            throw new CryptographicException("The computed authentication tag did not match the input authentication tag.");
        }
        public static ArgumentException CryptographyPlaintextCiphertextLengthMismatch()
        {
            throw new ArgumentException("Plaintext and ciphertext must have the same length.");
        }
        public static ArgumentException CryptographyInvalidNonceLength()
        {
            throw new ArgumentException("The specified nonce is not a valid size for this algorithm.");
        }
        public static ArgumentException CryptographyInvalidTagLength()
        {
            throw new ArgumentException("The specified tag is not a valid size for this algorithm.");
        }
        public static ArgumentException CannotBothBeNotNull(string param0, string param1)
        {
            return new ArgumentException(param0 + " and " + param1 + " cannot both be set");
        }
        public static ArgumentOutOfRangeException MustBeGreaterThanOrEqualTo(string paramName, long value)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(39, 1);
            defaultInterpolatedStringHandler.AppendLiteral("Value must be greater than or equal to ");
            defaultInterpolatedStringHandler.AppendFormatted(value);
            return new ArgumentOutOfRangeException(paramName, defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentOutOfRangeException MustBeLessThanOrEqualTo(string paramName, long value)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(36, 1);
            defaultInterpolatedStringHandler.AppendLiteral("Value must be less than or equal to ");
            defaultInterpolatedStringHandler.AppendFormatted(value);
            return new ArgumentOutOfRangeException(paramName, defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentOutOfRangeException MustBeBetweenInclusive(string paramName, long lower, long upper, long actual)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(43, 3);
            defaultInterpolatedStringHandler.AppendLiteral("Value must be between ");
            defaultInterpolatedStringHandler.AppendFormatted(lower);
            defaultInterpolatedStringHandler.AppendLiteral(" and ");
            defaultInterpolatedStringHandler.AppendFormatted(upper);
            defaultInterpolatedStringHandler.AppendLiteral(" inclusive, not ");
            defaultInterpolatedStringHandler.AppendFormatted(actual);
            return new ArgumentOutOfRangeException(paramName, defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentOutOfRangeException MustBeGreaterThanValueOrEqualToOtherValue(string paramName, long value0, long value1)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(40, 2);
            defaultInterpolatedStringHandler.AppendLiteral("Value must be greater than ");
            defaultInterpolatedStringHandler.AppendFormatted(value0);
            defaultInterpolatedStringHandler.AppendLiteral(" or equal to ");
            defaultInterpolatedStringHandler.AppendFormatted(value1);
            return new ArgumentOutOfRangeException(paramName, defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentException StreamMustBeReadable(string paramName)
        {
            return new ArgumentException("Stream must be readable", paramName);
        }
        public static InvalidOperationException StreamMustBeAtPosition0()
        {
            return new InvalidOperationException("Stream must be set to position 0");
        }
        public static InvalidOperationException TokenCredentialsRequireHttps()
        {
            return new InvalidOperationException("Use of token credentials requires HTTPS");
        }
        public static ArgumentException SasCredentialRequiresUriWithoutSas<TUriBuilder>(Uri uri)
        {
            Uri uri2 = new UriBuilder(uri) {
                Query = "[REDACTED]"
            }.Uri;
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(180, 5);
            defaultInterpolatedStringHandler.AppendLiteral("You cannot use ");
            defaultInterpolatedStringHandler.AppendFormatted("AzureSasCredential");
            defaultInterpolatedStringHandler.AppendLiteral(" when the resource URI also contains a Shared Access Signature: ");
            defaultInterpolatedStringHandler.AppendFormatted(uri2);
            defaultInterpolatedStringHandler.AppendLiteral("\n");
            defaultInterpolatedStringHandler.AppendLiteral("You can remove the shared access signature by creating a ");
            defaultInterpolatedStringHandler.AppendFormatted(typeof(TUriBuilder).Name);
            defaultInterpolatedStringHandler.AppendLiteral(", setting ");
            defaultInterpolatedStringHandler.AppendFormatted(typeof(TUriBuilder).Name);
            defaultInterpolatedStringHandler.AppendLiteral(".Sas to null,");
            defaultInterpolatedStringHandler.AppendLiteral(" and calling ");
            defaultInterpolatedStringHandler.AppendFormatted(typeof(TUriBuilder).Name);
            defaultInterpolatedStringHandler.AppendLiteral(".ToUri.");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasMissingData(string paramName)
        {
            return new InvalidOperationException("SAS is missing required parameter: " + paramName);
        }
        public static InvalidOperationException SasDataNotAllowed(string paramName, string paramNameNotAllowed)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(61, 2);
            defaultInterpolatedStringHandler.AppendLiteral("SAS cannot have the ");
            defaultInterpolatedStringHandler.AppendFormatted(paramNameNotAllowed);
            defaultInterpolatedStringHandler.AppendLiteral(" parameter when the ");
            defaultInterpolatedStringHandler.AppendFormatted(paramName);
            defaultInterpolatedStringHandler.AppendLiteral(" parameter is present");
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasDataInConjunction(string paramName, string paramName2)
        {
            return new InvalidOperationException("SAS cannot have the following parameters specified in conjunction: " + paramName + ", " + paramName2);
        }
        public static InvalidOperationException SasNamesNotMatching(string builderParam, string builderName, string clientParam)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(117, 6);
            defaultInterpolatedStringHandler.AppendLiteral("SAS Uri cannot be generated. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" does not match ");
            defaultInterpolatedStringHandler.AppendFormatted(clientParam);
            defaultInterpolatedStringHandler.AppendLiteral(" in the Client. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" must either be left empty or match the ");
            defaultInterpolatedStringHandler.AppendFormatted(clientParam);
            defaultInterpolatedStringHandler.AppendLiteral(" in the Client");
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasNamesNotMatching(string builderParam, string builderName)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(167, 4);
            defaultInterpolatedStringHandler.AppendLiteral("SAS Uri cannot be generated. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" does not match snapshot value in the URI in the Client. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" must either be left empty or match the snapshot value in the URI in the Client");
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasServiceNotMatching(string builderParam, string builderName, string expectedService)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(121, 6);
            defaultInterpolatedStringHandler.AppendLiteral("SAS Uri cannot be generated. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" does specify ");
            defaultInterpolatedStringHandler.AppendFormatted(expectedService);
            defaultInterpolatedStringHandler.AppendLiteral(". ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" must either specify ");
            defaultInterpolatedStringHandler.AppendFormatted(expectedService);
            defaultInterpolatedStringHandler.AppendLiteral(" or specify all Services are accessible in the value.");
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasClientMissingData(string paramName)
        {
            return new InvalidOperationException("SAS Uri cannot be generated. " + paramName + " in the client has not been set");
        }
        public static InvalidOperationException SasBuilderEmptyParam(string builderName, string paramName, string sasType)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(62, 3);
            defaultInterpolatedStringHandler.AppendLiteral("SAS Uri cannot be generated. ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(paramName);
            defaultInterpolatedStringHandler.AppendLiteral(" cannot be set to create a ");
            defaultInterpolatedStringHandler.AppendFormatted(sasType);
            defaultInterpolatedStringHandler.AppendLiteral(" SAS.");
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static InvalidOperationException SasIncorrectResourceType(string builderName, string builderParam, string value, string clientName)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(101, 4);
            defaultInterpolatedStringHandler.AppendLiteral("SAS Uri cannot be generated. Expected ");
            defaultInterpolatedStringHandler.AppendFormatted(builderName);
            defaultInterpolatedStringHandler.AppendLiteral(".");
            defaultInterpolatedStringHandler.AppendFormatted(builderParam);
            defaultInterpolatedStringHandler.AppendLiteral(" to be set to ");
            defaultInterpolatedStringHandler.AppendFormatted(value);
            defaultInterpolatedStringHandler.AppendLiteral(" to generate ");
            defaultInterpolatedStringHandler.AppendLiteral("the respective SAS for the client, ");
            defaultInterpolatedStringHandler.AppendFormatted(clientName);
            return new InvalidOperationException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentException InvalidPermission(char s)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(22, 1);
            defaultInterpolatedStringHandler.AppendLiteral("Invalid permission: '");
            defaultInterpolatedStringHandler.AppendFormatted(s);
            defaultInterpolatedStringHandler.AppendLiteral("'");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentException ParsingHttpRangeFailed()
        {
            return new ArgumentException("Could not parse the serialized range.");
        }
        public static AccessViolationException UnableAccessArray()
        {
            return new AccessViolationException("Unable to get array from memory pool");
        }
        public static NotImplementedException NotImplemented()
        {
            return new NotImplementedException();
        }
        public static AuthenticationException InvalidCredentials(string fullName)
        {
            return new AuthenticationException("Cannot authenticate credentials with " + fullName);
        }
        public static ArgumentException SeekOutsideBufferRange(long index, long inclusiveRangeStart, long exclusiveRangeEnd)
        {
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(61, 3);
            defaultInterpolatedStringHandler.AppendLiteral("Tried to seek ouside buffer range. Gave index ");
            defaultInterpolatedStringHandler.AppendFormatted(index);
            defaultInterpolatedStringHandler.AppendLiteral(", range is [");
            defaultInterpolatedStringHandler.AppendFormatted(inclusiveRangeStart);
            defaultInterpolatedStringHandler.AppendLiteral(",");
            defaultInterpolatedStringHandler.AppendFormatted(exclusiveRangeEnd);
            defaultInterpolatedStringHandler.AppendLiteral(").");
            return new ArgumentException(defaultInterpolatedStringHandler.ToStringAndClear());
        }
        public static ArgumentException VersionNotSupported(string paramName)
        {
            return new ArgumentException("The version specified by " + paramName + " is not supported by this library.");
        }
        public static RequestFailedException ClientRequestIdMismatch(Response response, string echo, string original)
        {
            int status = response.Status;
            DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(87, 2);
            defaultInterpolatedStringHandler.AppendLiteral("Response x-ms-client-request-id '");
            defaultInterpolatedStringHandler.AppendFormatted(echo);
            defaultInterpolatedStringHandler.AppendLiteral("' does not match the original expected request id, '");
            defaultInterpolatedStringHandler.AppendFormatted(original);
            defaultInterpolatedStringHandler.AppendLiteral("'.");
            return new RequestFailedException(status, defaultInterpolatedStringHandler.ToStringAndClear(), null);
        }
        public static ArgumentException TransactionalHashingNotSupportedWithClientSideEncryption()
        {
            return new ArgumentException("Client-side encryption and transactional hashing are not supported at the same time.");
        }
        public static void VerifyHttpsTokenAuth(Uri uri)
        {
            if (uri.Scheme != "https")
                throw new ArgumentException("Cannot use TokenCredential without HTTPS.");
        }
    }
}