/*
* Copyright (c) 2023 Vaughn Nugent
*
* Library: VNLib
* Package: VNLib.Net.Compression
* File: ThrowHelper.cs
*
* ThrowHelper.cs is part of VNLib.Net.Compression which is part of
* the larger VNLib collection of libraries and utilities.
*
* VNLib.Net.Compression is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 2 of the License,
* or (at your option) any later version.
*
* VNLib.Net.Compression is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with VNLib.Net.Compression. If not, see http://www.gnu.org/licenses/.
*/
using System;
using VNLib.Utils;
namespace VNLib.Net.Compression
{
internal static class ThrowHelper
{
/*
* Error codes correspond to constants
* in the native compression library
*/
enum NativeErrorType
{
ErrInvalidPtr = -1,
ErrOutOfMemory = -2,
ErrCompTypeNotSupported = -9,
ErrCompLevelNotSupported = -10,
ErrInvalidInput = -11,
ErrInvalidOutput = -12,
ErrGzInvalidState = -16,
ErrGzOverflow = -17,
ErrBrInvalidState = -24
}
///
/// Determines if the specified result is an error and throws an exception if it is
///
///
///
public static void ThrowIfError(ERRNO result)
{
//Check for no error
if(result > 0)
{
return;
}
switch ((NativeErrorType)(int)result)
{
case NativeErrorType.ErrInvalidPtr:
throw new NativeCompressionException("A pointer to a compressor instance was null");
case NativeErrorType.ErrOutOfMemory:
throw new NativeCompressionException("An operation falied because the system is out of memory");
case NativeErrorType.ErrCompTypeNotSupported:
throw new NotSupportedException("The desired compression method is not supported by the native library");
case NativeErrorType.ErrCompLevelNotSupported:
throw new NotSupportedException("The desired compression level is not supported by the native library");
case NativeErrorType.ErrInvalidInput:
throw new NativeCompressionException("The input buffer was null and the input size was greater than 0");
case NativeErrorType.ErrInvalidOutput:
throw new NativeCompressionException("The output buffer was null and the output size was greater than 0");
case NativeErrorType.ErrGzInvalidState:
throw new NativeCompressionException("A gzip operation failed because the compressor state is invalid (null compressor pointer)");
case NativeErrorType.ErrGzOverflow:
throw new NativeCompressionException("A gzip operation failed because the output buffer is too small");
case NativeErrorType.ErrBrInvalidState:
throw new NativeCompressionException("A brotli operation failed because the compressor state is invalid (null compressor pointer)");
default:
break;
}
}
}
}