protected static RestClientException CreateDefaultException(List <HttpStatusCode> expected, IRestResponse result)
        {
            var statusCode     = result?.StatusCode;
            var content        = result?.Content;
            var errorException = result.ErrorException;

            return(RestClientExceptionUtils.CreateDefaultException(expected, statusCode, content, errorException));
        }
        private static void ThrowRestClientException(Exception e, HttpWebResponse errorResponse)
        {
            var content = (errorResponse?.GetResponseStream() != null) ?
                          new StreamReader(errorResponse.GetResponseStream()).ReadToEnd()
                : null;

            throw RestClientExceptionUtils.CreateDefaultException(new List <HttpStatusCode> {
                HttpStatusCode.OK
            }, errorResponse?.StatusCode, content, e);
        }
        public override void ValidateResponse(IRestResponse result)
        {
            if (result.StatusCode != HttpStatusCode.OK)
            {
                var errorResponse = RestClientExceptionUtils.GetDefaultErrorResponse(result?.Content);

                if (result.StatusCode == HttpStatusCode.Forbidden &&
                    errorResponse?.Code == (int)ReturnCode.INVALID_STATE)
                {
                    throw new FolderNameAlreadyExistsException();
                }
                else if (result.StatusCode == HttpStatusCode.BadRequest &&
                         errorResponse?.Code == (int)ReturnCode.INVALID_REQUEST_DATA)
                {
                    throw new InvalidFolderNameException();
                }

                throw CreateDefaultException(HttpStatusCode.OK, result);
            }

            base.ValidateResponse(result);
        }
        public FoldersResponse UnwrapResponse(IRestResponse <FoldersResponse> result)
        {
            if (result.StatusCode == HttpStatusCode.NoContent)
            {
#pragma warning disable IDE0017 // Initialisierung von Objekten vereinfachen
                var foldersResponse = new FoldersResponse();
#pragma warning restore IDE0017 // Initialisierung von Objekten vereinfachen
                foldersResponse.Folders = new List <Folder>();
                return(foldersResponse);
            }

            if (result.StatusCode == HttpStatusCode.OK)
            {
                return(result.Data);
            }

            if (RestClientExceptionUtils.GetDefaultErrorResponse(result?.Content)?.Code == (int)ReturnCode.INVALID_STATE)
            {
                throw new FolderParentNotFoundException();
            }

            throw CreateDefaultException(HttpStatusCode.OK, result);
        }
        public FolderCreationResponse UnwrapResponse(IRestResponse <FolderCreationResponse> result)
        {
            if (result.StatusCode == HttpStatusCode.Created)
            {
                return(result.Data);
            }

            if (result.StatusCode == HttpStatusCode.Forbidden)
            {
                var error = RestClientExceptionUtils.GetDefaultErrorResponse(result?.Content);
                if (error != null && error.Code == 300)
                {
                    if (IsFolderNotFoundException(error))
                    {
                        throw new FolderParentNotFoundException();
                    }

                    if (IsFolderAlreadyExistsException(error))
                    {
                        throw new FolderAlreadyExistsException();
                    }

                    if (IsMaxNumberOfFoldersInCollectionReachedException(error))
                    {
                        throw new MaxNumberOfFoldersInCollectionReachedException();
                    }

                    if (IsMaxDepthOfNestedFoldersExceededException(error))
                    {
                        throw new MaxDepthOfNestedFoldersExceededException();
                    }
                }
            }

            throw CreateDefaultException(HttpStatusCode.OK, result);
        }