internal static CosmosException Create(
            DocumentClientException dce,
            CosmosDiagnosticsContext diagnosticsContext)
        {
            Headers headers = new Headers();

            if (dce.Headers != null)
            {
                foreach (string key in dce.Headers)
                {
                    string value = dce.Headers[key];
                    if (value == null)
                    {
                        throw new ArgumentNullException(
                                  message: $"{nameof(key)}: {key};",
                                  innerException: dce);
                    }

                    headers.Add(key, value);
                }
            }

            HttpStatusCode httpStatusCode;

            if (dce.StatusCode.HasValue)
            {
                httpStatusCode = dce.StatusCode.Value;
            }
            else if (dce.InnerException != null && dce.InnerException is TransportException)
            {
                httpStatusCode = HttpStatusCode.RequestTimeout;
            }
            else
            {
                httpStatusCode = HttpStatusCode.InternalServerError;
            }

            return(CosmosExceptionFactory.Create(
                       httpStatusCode,
                       (int)dce.GetSubStatus(),
                       dce.Message,
                       dce.StackTrace,
                       dce.ActivityId,
                       dce.RequestCharge,
                       dce.RetryAfter,
                       headers,
                       diagnosticsContext,
                       dce.Error,
                       dce.InnerException));
        }