aboutsummaryrefslogtreecommitdiff
path: root/lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-07-27 01:39:44 -0400
committerLibravatar vnugent <public@vaughnnugent.com>2023-07-27 01:39:44 -0400
commit1074db64cc7bae103240ff1220d50d1958b7a900 (patch)
treea9cff64a3ce836027820b1c536b1a88db4e13a0d /lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs
parentab07d9d36e3e61f48584920d882d95dead6e7600 (diff)
Native compression lib first build, managed, and tests
Diffstat (limited to 'lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs')
-rw-r--r--lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs91
1 files changed, 91 insertions, 0 deletions
diff --git a/lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs b/lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs
new file mode 100644
index 0000000..2793526
--- /dev/null
+++ b/lib/Net.Compression/VNLib.Net.Compression/ThrowHelper.cs
@@ -0,0 +1,91 @@
+/*
+* 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
+ }
+
+ /// <summary>
+ /// Determines if the specified result is an error and throws an exception if it is
+ /// </summary>
+ /// <param name="result"></param>
+ /// <exception cref="NativeCompressionException"></exception>
+ 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;
+ }
+ }
+ }
+} \ No newline at end of file