diff --git a/README.md b/README.md
index 04f0da0..a7233f0 100644
--- a/README.md
+++ b/README.md
@@ -54,10 +54,9 @@ You will only need the `dev.freya02:discord-zstd-java-api:VERSION` dependency, i
### Usage
-First, get a `ZstdDecompressorFactoryProvider` by loading one using a `ServiceLoader`,
-doing this first ensures you can throw an error when missing an implementation before it can throw one because of missing natives, as they are brought by the implementation.
-
-Then, you can check if the natives are loaded by checking `ZstdNativesLoader.isLoaded()`,
-but usually you'll want to call `loadFromJar()`, you should do it late enough so the bot developer has a chance to load different natives.
-
-Finally, get a factory from the provider, it will be configured with the values you pass.
+The main interface is `DiscordZstd`, you can get an instance with `DiscordZstdProvider.get()`.
+Then, you can either:
+1. Do bulk processing with a decompressor obtained with `DiscordZstd#createDecompressor` and kept per gateway connection,
+ calling `ZstdDecompressor#decompress` on each gateway message
+2. Process gradually with a context obtained from `DiscordZstd#createContext` and kept per gateway connection,
+ then making input streams with `ZstdContext#createInputStream` from each gateway message
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstd.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstd.java
new file mode 100644
index 0000000..8690a30
--- /dev/null
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstd.java
@@ -0,0 +1,33 @@
+package dev.freya02.discord.zstd.api;
+
+import org.jspecify.annotations.NullMarked;
+
+import java.io.InputStream;
+
+@NullMarked
+public interface DiscordZstd {
+ // TODO rename type
+ /**
+ * Creates a new {@link DiscordZstdContext}.
+ *
This is used to keep track of streaming decompression after each input is consumed via an {@link InputStream}.
+ *
+ * @return A new {@link DiscordZstdContext} instance
+ */
+ DiscordZstdContext createContext();
+
+ // TODO rename type
+ /**
+ * Creates a new {@link DiscordZstdDecompressorFactory} with the provided decompression buffer size.
+ *
+ * @param bufferSizeHint
+ * A hint for the size of the buffer used for decompression,
+ * must be larger than {@value DiscordZstdDecompressor#MIN_BUFFER_SIZE} or be equal to {@value DiscordZstdDecompressor#ZSTD_RECOMMENDED_BUFFER_SIZE}.
+ * Typically, bigger buffers mean less decompression loops, it does not change inputs or outputs
+ *
+ * @throws IllegalArgumentException
+ * If {@code bufferSize} is less than {@value DiscordZstdDecompressor#MIN_BUFFER_SIZE} and not {@value DiscordZstdDecompressor#ZSTD_RECOMMENDED_BUFFER_SIZE}
+ *
+ * @return A new {@link DiscordZstdDecompressorFactory} instance
+ */
+ DiscordZstdDecompressorFactory createDecompressorFactory(int bufferSizeHint);
+}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContext.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdContext.java
similarity index 84%
rename from api/src/main/java/dev/freya02/discord/zstd/api/ZstdContext.java
rename to api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdContext.java
index 340bca4..58446a7 100644
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContext.java
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdContext.java
@@ -5,7 +5,7 @@
import java.io.InputStream;
@NullMarked
-public interface ZstdContext {
+public interface DiscordZstdContext {
void close();
void reset();
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressor.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressor.java
similarity index 97%
rename from api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressor.java
rename to api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressor.java
index ef5d125..1512b35 100644
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressor.java
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressor.java
@@ -9,7 +9,7 @@
*
Note: Instances are not thread safe, as there should be an instance per gateway connection, which uses 1 read thread.
*/
@NullMarked
-public interface ZstdDecompressor {
+public interface DiscordZstdDecompressor {
/**
* The "recommended" buffer size as defined by {@code ZSTD_DStreamOutSize()} (128 KB as of v1.5.7). This isn't a default.
*
@@ -57,7 +57,7 @@ public interface ZstdDecompressor {
* @throws IllegalStateException
* If this decompressor is closed,
* or if the decompressor is an errored state and needs to be {@linkplain #reset() reset}
- * @throws ZstdException
+ * @throws DiscordZstdException
* If Zstd was unable to decompress the data for any reason, if this exception occurs,
* the decompressor will be in an errored state and will need to be {@linkplain #reset() reset}
*/
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressorFactory.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressorFactory.java
new file mode 100644
index 0000000..184b6a7
--- /dev/null
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdDecompressorFactory.java
@@ -0,0 +1,18 @@
+package dev.freya02.discord.zstd.api;
+
+import org.jspecify.annotations.NullMarked;
+
+/**
+ * Factory of {@link DiscordZstdDecompressor}.
+ *
+ *
Instances are thread safe.
+ */
+@NullMarked
+public interface DiscordZstdDecompressorFactory {
+ /**
+ * Creates a new {@link DiscordZstdDecompressor} configured with the parameters passed to this factory.
+ *
+ * @return A new {@link DiscordZstdDecompressor} instance
+ */
+ DiscordZstdDecompressor create();
+}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdException.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdException.java
similarity index 54%
rename from api/src/main/java/dev/freya02/discord/zstd/api/ZstdException.java
rename to api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdException.java
index 1991f8e..f5db88c 100644
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdException.java
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdException.java
@@ -3,8 +3,8 @@
/**
* An exception thrown when Zstd returns an error code.
*/
-public class ZstdException extends RuntimeException {
- public ZstdException(String message) {
+public class DiscordZstdException extends RuntimeException {
+ public DiscordZstdException(String message) {
super(message);
}
}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdNativesLoader.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdNativesLoader.java
similarity index 95%
rename from api/src/main/java/dev/freya02/discord/zstd/api/ZstdNativesLoader.java
rename to api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdNativesLoader.java
index 6825b78..a19511b 100644
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdNativesLoader.java
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdNativesLoader.java
@@ -12,7 +12,7 @@
* to the absolute path of the native library.
*/
@NullMarked
-public class ZstdNativesLoader {
+public class DiscordZstdNativesLoader {
private static boolean init = false;
/**
@@ -41,6 +41,8 @@ public static synchronized boolean load(Path path) {
//noinspection ConstantValue
if (path == null)
throw new IllegalArgumentException("path is null");
+ if (!path.isAbsolute())
+ throw new IllegalArgumentException("path is not absolute: " + path);
final String pathStr = path.toAbsolutePath().toString();
System.setProperty("zstd.lib", pathStr);
@@ -86,7 +88,7 @@ public static synchronized boolean loadFromJar() throws IOException {
}
String resourcePath = String.format("/natives/%s/libzstd.%s", platform, extension);
- Path nativePath = NativeUtil.copyNativeFromJar(resourcePath, ZstdNativesLoader.class);
+ Path nativePath = NativeUtil.copyNativeFromJar(resourcePath, DiscordZstdNativesLoader.class);
load(nativePath);
return true;
}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdProvider.java b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdProvider.java
new file mode 100644
index 0000000..7e8d7af
--- /dev/null
+++ b/api/src/main/java/dev/freya02/discord/zstd/api/DiscordZstdProvider.java
@@ -0,0 +1,35 @@
+package dev.freya02.discord.zstd.api;
+
+import org.jspecify.annotations.NullMarked;
+
+import java.util.Iterator;
+import java.util.ServiceConfigurationError;
+import java.util.ServiceLoader;
+
+@NullMarked
+public class DiscordZstdProvider {
+
+ private static final class InstanceHolder {
+ private static final DiscordZstd INSTANCE = load();
+ }
+
+ /**
+ * Loads the first implementation of {@link DiscordZstd} found on the classpath.
+ *
+ * @throws ServiceConfigurationError If the provider failed to load
+ *
+ * @return An implementation of {@link DiscordZstd}
+ */
+ public static DiscordZstd get() {
+ return InstanceHolder.INSTANCE;
+ }
+
+ private static DiscordZstd load() {
+ Iterator instances = ServiceLoader.load(DiscordZstd.class).iterator();
+ if (!instances.hasNext()) {
+ throw new IllegalStateException("No implementations of discord-zstd-java could be found, make sure you added the dependency as described in https://github.com/freya022/discord-zstd-java/blob/master/README.md#-for-bot-developers");
+ }
+
+ return instances.next();
+ }
+}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactory.java b/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactory.java
deleted file mode 100644
index 404f7b4..0000000
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactory.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package dev.freya02.discord.zstd.api;
-
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public interface ZstdContextFactory {
- ZstdContext create();
-}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactoryProvider.java b/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactoryProvider.java
deleted file mode 100644
index 104a223..0000000
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdContextFactoryProvider.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package dev.freya02.discord.zstd.api;
-
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public interface ZstdContextFactoryProvider {
- ZstdContextFactory get();
-}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactory.java b/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactory.java
deleted file mode 100644
index 58ddf33..0000000
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactory.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package dev.freya02.discord.zstd.api;
-
-import org.jspecify.annotations.NullMarked;
-
-/**
- * Factory of {@link ZstdDecompressor}.
- *
- * Instances are thread safe.
- */
-@NullMarked
-public interface ZstdDecompressorFactory {
- /**
- * Creates a new {@link ZstdDecompressor} configured with the parameters passed to this factory.
- *
- * @return A new {@link ZstdDecompressor} instance
- */
- ZstdDecompressor create();
-}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactoryProvider.java b/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactoryProvider.java
deleted file mode 100644
index f8749a2..0000000
--- a/api/src/main/java/dev/freya02/discord/zstd/api/ZstdDecompressorFactoryProvider.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package dev.freya02.discord.zstd.api;
-
-import org.jspecify.annotations.NullMarked;
-
-import java.util.ServiceLoader;
-
-/**
- * Provider of {@link ZstdDecompressorFactory}.
- *
- *
Instances are thread safe and can be obtained using {@link ServiceLoader}.
- */
-@NullMarked
-public interface ZstdDecompressorFactoryProvider {
- /**
- * Creates a new {@link ZstdDecompressorFactory} with the provided decompression buffer size.
- *
- * @param bufferSizeHint
- * A hint for the size of the buffer used for decompression,
- * must be larger than {@value ZstdDecompressor#MIN_BUFFER_SIZE} or be equal to {@value ZstdDecompressor#ZSTD_RECOMMENDED_BUFFER_SIZE}.
- * Typically, bigger buffers mean less decompression loops, it does not change inputs or outputs
- *
- * @throws IllegalArgumentException
- * If {@code bufferSize} is less than {@value ZstdDecompressor#MIN_BUFFER_SIZE} and not {@value ZstdDecompressor#ZSTD_RECOMMENDED_BUFFER_SIZE}
- *
- * @return A new {@link ZstdDecompressorFactory} instance
- */
- ZstdDecompressorFactory get(int bufferSizeHint);
-}
diff --git a/api/src/main/java/dev/freya02/discord/zstd/internal/AbstractZstdDecompressor.java b/api/src/main/java/dev/freya02/discord/zstd/internal/AbstractZstdDecompressor.java
index 2ddeb6f..bab1cb4 100644
--- a/api/src/main/java/dev/freya02/discord/zstd/internal/AbstractZstdDecompressor.java
+++ b/api/src/main/java/dev/freya02/discord/zstd/internal/AbstractZstdDecompressor.java
@@ -1,10 +1,10 @@
package dev.freya02.discord.zstd.internal;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
import java.util.List;
-public abstract class AbstractZstdDecompressor implements ZstdDecompressor {
+public abstract class AbstractZstdDecompressor implements DiscordZstdDecompressor {
protected AbstractZstdDecompressor() {
}
diff --git a/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdDecompressorBenchmark.java b/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdDecompressorBenchmark.java
index 129c9d5..54bd3d0 100644
--- a/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdDecompressorBenchmark.java
+++ b/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdDecompressorBenchmark.java
@@ -1,9 +1,9 @@
package dev.freya02.discord.zstd;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
-import dev.freya02.discord.zstd.jni.ZstdJNIDecompressorFactoryProvider;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import dev.freya02.discord.zstd.api.DiscordZstdNativesLoader;
+import dev.freya02.discord.zstd.jni.DiscordZstdJNI;
import net.dv8tion.jda.api.utils.data.DataObject;
import net.dv8tion.jda.internal.utils.IOUtil;
import org.openjdk.jmh.annotations.*;
@@ -26,7 +26,7 @@
@Fork(1)
public class ZstdDecompressorBenchmark {
- private static final int ZSTD_BUFFER_SIZE = ZstdDecompressor.DEFAULT_BUFFER_SIZE;
+ private static final int ZSTD_BUFFER_SIZE = DiscordZstdDecompressor.DEFAULT_BUFFER_SIZE;
private static final int ZLIB_BUFFER_SIZE = 2048; // JDA default
@State(Scope.Benchmark)
@@ -34,13 +34,13 @@ public static class ZstdDecompressorState {
@Param({"jni"})
private String impl;
- public ZstdDecompressor decompressor;
+ public DiscordZstdDecompressor decompressor;
@Setup
public void setup() throws IOException {
- ZstdNativesLoader.loadFromJar();
- ZstdDecompressorFactory factory = switch (impl) {
- case "jni" -> new ZstdJNIDecompressorFactoryProvider().get(ZSTD_BUFFER_SIZE);
+ DiscordZstdNativesLoader.loadFromJar();
+ DiscordZstdDecompressorFactory factory = switch (impl) {
+ case "jni" -> new DiscordZstdJNI().createDecompressorFactory(ZSTD_BUFFER_SIZE);
default -> throw new AssertionError("Unknown implementation: " + impl);
};
decompressor = factory.create();
diff --git a/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdStreamingBenchmark.java b/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdStreamingBenchmark.java
index 0b5be79..4abecc9 100644
--- a/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdStreamingBenchmark.java
+++ b/benchmarks/src/jmh/java/dev/freya02/discord/zstd/ZstdStreamingBenchmark.java
@@ -1,8 +1,8 @@
package dev.freya02.discord.zstd;
-import dev.freya02.discord.zstd.api.ZstdContext;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
-import dev.freya02.discord.zstd.jni.ZstdJNIContextFactoryProvider;
+import dev.freya02.discord.zstd.api.DiscordZstdContext;
+import dev.freya02.discord.zstd.api.DiscordZstdNativesLoader;
+import dev.freya02.discord.zstd.jni.DiscordZstdJNI;
import net.dv8tion.jda.api.utils.data.DataObject;
import net.dv8tion.jda.internal.utils.IOUtil;
import org.jetbrains.annotations.Nullable;
@@ -30,16 +30,15 @@ public static class ZstdDecompressorState {
@Param({"jni"})
private String impl;
- public ZstdContext context;
+ public DiscordZstdContext context;
@Setup
public void setup() throws IOException {
- ZstdNativesLoader.loadFromJar();
- var factory = switch (impl) {
- case "jni" -> new ZstdJNIContextFactoryProvider().get();
+ DiscordZstdNativesLoader.loadFromJar();
+ context = switch (impl) {
+ case "jni" -> new DiscordZstdJNI().createContext();
default -> throw new AssertionError("Unknown implementation: " + impl);
};
- context = factory.create();
}
@TearDown
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFM.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFM.java
new file mode 100644
index 0000000..79a05cf
--- /dev/null
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFM.java
@@ -0,0 +1,32 @@
+package dev.freya02.discord.zstd.ffm;
+
+import dev.freya02.discord.zstd.api.*;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+@NullMarked
+public class DiscordZstdFFM implements DiscordZstd {
+ private static final Logger LOGGER = LoggerFactory.getLogger(DiscordZstdFFM.class);
+
+ public DiscordZstdFFM() throws IOException {
+ LOGGER.debug("Using FFM implementation of discord-zstd-java");
+
+ // Load natives if they weren't already
+ DiscordZstdNativesLoader.loadFromJar();
+ }
+
+ @Override
+ public DiscordZstdContext createContext() {
+ return new DiscordZstdFFMContext();
+ }
+
+ @Override
+ public DiscordZstdDecompressorFactory createDecompressorFactory(int bufferSizeHint) {
+ if (bufferSizeHint < DiscordZstdDecompressor.MIN_BUFFER_SIZE && bufferSizeHint != DiscordZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
+ throw new IllegalArgumentException("Buffer must be larger than or equal to " + DiscordZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSizeHint);
+ return new DiscordZstdFFMDecompressorFactory(bufferSizeHint);
+ }
+}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContext.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMContext.java
similarity index 78%
rename from ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContext.java
rename to ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMContext.java
index 9803c12..0511270 100644
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContext.java
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMContext.java
@@ -1,20 +1,20 @@
package dev.freya02.discord.zstd.ffm;
-import dev.freya02.discord.zstd.api.ZstdContext;
-import dev.freya02.discord.zstd.api.ZstdException;
+import dev.freya02.discord.zstd.api.DiscordZstdContext;
+import dev.freya02.discord.zstd.api.DiscordZstdException;
import org.jspecify.annotations.NullMarked;
import java.io.InputStream;
import java.lang.foreign.MemorySegment;
@NullMarked
-public class ZstdFFMContext implements ZstdContext {
+class DiscordZstdFFMContext implements DiscordZstdContext {
private final MemorySegment stream;
private boolean invalidated = false;
private boolean closed = false;
- public ZstdFFMContext() {
+ public DiscordZstdFFMContext() {
this.stream = Zstd.ZSTD_createDStream();
}
@@ -38,7 +38,7 @@ public void reset() {
@Override
public InputStream createInputStream(byte[] input) {
- return new ZstdFFMInputStream(this, input);
+ return new DiscordZstdFFMInputStream(this, input);
}
public void decompress(MemorySegment dst, long dstCapacity, MemorySegment dstPos, MemorySegment src, long srcSize, MemorySegment srcPos) {
@@ -54,8 +54,8 @@ public void decompress(MemorySegment dst, long dstCapacity, MemorySegment dstPos
}
}
- public ZstdException createException(String message) {
+ public DiscordZstdException createException(String message) {
invalidated = true;
- return new ZstdException(message);
+ return new DiscordZstdException(message);
}
}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressor.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressor.java
similarity index 92%
rename from ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressor.java
rename to ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressor.java
index 82bfb1a..ee4865a 100644
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressor.java
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressor.java
@@ -1,6 +1,6 @@
package dev.freya02.discord.zstd.ffm;
-import dev.freya02.discord.zstd.api.ZstdException;
+import dev.freya02.discord.zstd.api.DiscordZstdException;
import dev.freya02.discord.zstd.internal.AbstractZstdDecompressor;
import org.jspecify.annotations.NullMarked;
import org.slf4j.Logger;
@@ -14,9 +14,9 @@
import java.util.List;
@NullMarked
-public class ZstdFFMDecompressor extends AbstractZstdDecompressor {
+class DiscordZstdFFMDecompressor extends AbstractZstdDecompressor {
- private static final Logger LOG = LoggerFactory.getLogger(ZstdFFMDecompressor.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DiscordZstdFFMDecompressor.class);
private final MemorySegment stream;
private final MemorySegment dstSegment;
@@ -26,7 +26,7 @@ public class ZstdFFMDecompressor extends AbstractZstdDecompressor {
private boolean invalidated = false;
private boolean closed = false;
- protected ZstdFFMDecompressor(int bufferSizeHint)
+ protected DiscordZstdFFMDecompressor(int bufferSizeHint)
{
this.stream = Zstd.ZSTD_createDStream();
@@ -138,8 +138,8 @@ private static long getLong(MemorySegment segment) {
return segment.get(ValueLayout.JAVA_LONG, 0);
}
- private ZstdException createException(String message) {
+ private DiscordZstdException createException(String message) {
invalidated = true;
- return new ZstdException(message);
+ return new DiscordZstdException(message);
}
}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressorFactory.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressorFactory.java
new file mode 100644
index 0000000..1f076d6
--- /dev/null
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMDecompressorFactory.java
@@ -0,0 +1,20 @@
+package dev.freya02.discord.zstd.ffm;
+
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+class DiscordZstdFFMDecompressorFactory implements DiscordZstdDecompressorFactory {
+
+ private final int bufferSizeHint;
+
+ protected DiscordZstdFFMDecompressorFactory(int bufferSizeHint) {
+ this.bufferSizeHint = bufferSizeHint;
+ }
+
+ @Override
+ public DiscordZstdDecompressor create() {
+ return new DiscordZstdFFMDecompressor(bufferSizeHint);
+ }
+}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMInputStream.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMInputStream.java
similarity index 92%
rename from ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMInputStream.java
rename to ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMInputStream.java
index be9e59e..950f4cb 100644
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMInputStream.java
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/DiscordZstdFFMInputStream.java
@@ -10,9 +10,9 @@
import java.util.Objects;
@NullMarked
-public class ZstdFFMInputStream extends InputStream {
+class DiscordZstdFFMInputStream extends InputStream {
- private final ZstdFFMContext context;
+ private final DiscordZstdFFMContext context;
private final MemorySegment input;
private final long inputSize;
@@ -22,7 +22,7 @@ public class ZstdFFMInputStream extends InputStream {
private boolean closed = false;
- protected ZstdFFMInputStream(ZstdFFMContext context, byte[] input) {
+ protected DiscordZstdFFMInputStream(DiscordZstdFFMContext context, byte[] input) {
this.context = context;
final Arena arena = Arena.ofAuto();
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/Zstd.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/Zstd.java
index 5580fdc..fbfd0b4 100644
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/Zstd.java
+++ b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/Zstd.java
@@ -39,7 +39,7 @@
* the return value is a suggested next input size (just a hint for better latency)
* that will never request more than the remaining content of the compressed frame.
*/
-public final class Zstd {
+final class Zstd {
private Zstd() {
// Should not be called directly
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactory.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactory.java
deleted file mode 100644
index 776f423..0000000
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.freya02.discord.zstd.ffm;
-
-import dev.freya02.discord.zstd.api.ZstdContext;
-import dev.freya02.discord.zstd.api.ZstdContextFactory;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdFFMContextFactory implements ZstdContextFactory {
- @Override
- public ZstdContext create() {
- return new ZstdFFMContext();
- }
-}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactoryProvider.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactoryProvider.java
deleted file mode 100644
index 6e491cd..0000000
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMContextFactoryProvider.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.freya02.discord.zstd.ffm;
-
-import dev.freya02.discord.zstd.api.ZstdContextFactory;
-import dev.freya02.discord.zstd.api.ZstdContextFactoryProvider;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdFFMContextFactoryProvider implements ZstdContextFactoryProvider {
- @Override
- public ZstdContextFactory get() {
- return new ZstdFFMContextFactory();
- }
-}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactory.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactory.java
deleted file mode 100644
index b693c91..0000000
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package dev.freya02.discord.zstd.ffm;
-
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdFFMDecompressorFactory implements ZstdDecompressorFactory {
-
- private final int bufferSize;
-
- protected ZstdFFMDecompressorFactory(int bufferSize) {
- if (bufferSize < ZstdDecompressor.MIN_BUFFER_SIZE && bufferSize != ZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
- throw new IllegalArgumentException("Buffer must be larger than or equal to " + ZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSize);
- this.bufferSize = bufferSize;
- }
-
- @Override
- public ZstdDecompressor create() {
- if (!ZstdNativesLoader.isLoaded()) {
- throw new IllegalStateException("Natives are not loaded yet, see ZstdNativesLoader");
- }
- return new ZstdFFMDecompressor(bufferSize);
- }
-}
diff --git a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactoryProvider.java b/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactoryProvider.java
deleted file mode 100644
index f9beb9e..0000000
--- a/ffm-impl/src/main/java/dev/freya02/discord/zstd/ffm/ZstdFFMDecompressorFactoryProvider.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.freya02.discord.zstd.ffm;
-
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdFFMDecompressorFactoryProvider implements ZstdDecompressorFactoryProvider {
-
- @Override
- public ZstdDecompressorFactory get(int bufferSizeHint) {
- return new ZstdFFMDecompressorFactory(bufferSizeHint);
- }
-}
diff --git a/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd b/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd
new file mode 100644
index 0000000..0cf1dd1
--- /dev/null
+++ b/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd
@@ -0,0 +1 @@
+dev.freya02.discord.zstd.ffm.DiscordZstdFFM
diff --git a/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider b/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider
deleted file mode 100644
index 53b3ead..0000000
--- a/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider
+++ /dev/null
@@ -1 +0,0 @@
-dev.freya02.discord.zstd.ffm.ZstdFFMContextFactoryProvider
diff --git a/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider b/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
deleted file mode 100644
index 294ac6d..0000000
--- a/ffm-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
+++ /dev/null
@@ -1 +0,0 @@
-dev.freya02.discord.zstd.ffm.ZstdFFMDecompressorFactoryProvider
diff --git a/ffm-impl/src/test/java/dev/freya02/discord/zstd/ffm/ZstdFFMTest.java b/ffm-impl/src/test/java/dev/freya02/discord/zstd/ffm/ZstdFFMTest.java
index 2156fee..263ed13 100644
--- a/ffm-impl/src/test/java/dev/freya02/discord/zstd/ffm/ZstdFFMTest.java
+++ b/ffm-impl/src/test/java/dev/freya02/discord/zstd/ffm/ZstdFFMTest.java
@@ -1,9 +1,10 @@
package dev.freya02.discord.zstd.ffm;
import dev.freya02.discord.zstd.TestChunks;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
+import dev.freya02.discord.zstd.api.DiscordZstdContext;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import dev.freya02.discord.zstd.api.DiscordZstdProvider;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -18,15 +19,14 @@ public class ZstdFFMTest {
private static List chunks;
@BeforeAll
- public static void setup() throws IOException {
+ public static void setup() {
chunks = TestChunks.get(TestChunks.Compression.ZSTD);
- ZstdNativesLoader.loadFromJar();
}
@Test
public void test_decompression() {
- ZstdDecompressorFactory factory = new ZstdFFMDecompressorFactoryProvider().get(ZstdDecompressor.DEFAULT_BUFFER_SIZE);
- ZstdDecompressor decompressor = factory.create();
+ DiscordZstdDecompressorFactory factory = DiscordZstdProvider.get().createDecompressorFactory(DiscordZstdDecompressor.DEFAULT_BUFFER_SIZE);
+ DiscordZstdDecompressor decompressor = factory.create();
for (TestChunks.Chunk chunk : chunks) {
final byte[] actual = decompressor.decompress(chunk.getCompressed());
final byte[] expected = chunk.getDecompressed();
@@ -36,7 +36,7 @@ public void test_decompression() {
@Test
public void test_input_stream() throws IOException {
- final ZstdFFMContext context = new ZstdFFMContext();
+ DiscordZstdContext context = DiscordZstdProvider.get().createContext();
for (TestChunks.Chunk chunk : chunks) {
try (InputStream stream = context.createInputStream(chunk.getCompressed())) {
final byte[] actual = stream.readAllBytes();
diff --git a/jna-impl/README.md b/jna-impl/README.md
new file mode 100644
index 0000000..094d2c6
--- /dev/null
+++ b/jna-impl/README.md
@@ -0,0 +1 @@
+This module is kept for reference purposes, it is nowhere near fast enough to compete with Zlib decompression, thus, this module is no longer published.
diff --git a/jna-impl/build.gradle.kts b/jna-impl/build.gradle.kts
index 25d88da..fcb0e0c 100644
--- a/jna-impl/build.gradle.kts
+++ b/jna-impl/build.gradle.kts
@@ -1,7 +1,6 @@
plugins {
`java-conventions`
`java-library`
- `publish-conventions`
}
val fullProjectName = "${rootProject.name}-${project.name}"
@@ -49,11 +48,3 @@ tasks.withType {
}
}
}
-
-registerPublication(
- name = fullProjectName,
- description = "Zstandard streaming decompression API for JVM Discord API wrappers using Java Native Access (JNA)",
- url = "https://github.com/freya022/discord-zstd-java/tree/master/jna-impl",
-) {
- from(components["java"])
-}
diff --git a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressor.java b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressor.java
index 6f8fb7e..0d1d480 100644
--- a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressor.java
+++ b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressor.java
@@ -1,7 +1,7 @@
package dev.freya02.discord.zstd.jna;
import com.sun.jna.Pointer;
-import dev.freya02.discord.zstd.api.ZstdException;
+import dev.freya02.discord.zstd.api.DiscordZstdException;
import dev.freya02.discord.zstd.internal.AbstractZstdDecompressor;
import org.jspecify.annotations.NullMarked;
import org.slf4j.Logger;
@@ -122,8 +122,8 @@ public byte[] decompress(byte[] data)
}
}
- private ZstdException createException(String message) {
+ private DiscordZstdException createException(String message) {
invalidated = true;
- return new ZstdException(message);
+ return new DiscordZstdException(message);
}
}
diff --git a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactory.java b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactory.java
index c14dcef..726ea13 100644
--- a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactory.java
+++ b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactory.java
@@ -1,24 +1,24 @@
package dev.freya02.discord.zstd.jna;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import dev.freya02.discord.zstd.api.DiscordZstdNativesLoader;
import org.jspecify.annotations.NullMarked;
@NullMarked
-public class ZstdJNADecompressorFactory implements ZstdDecompressorFactory {
+public class ZstdJNADecompressorFactory implements DiscordZstdDecompressorFactory {
private final int bufferSize;
protected ZstdJNADecompressorFactory(int bufferSize) {
- if (bufferSize < ZstdDecompressor.MIN_BUFFER_SIZE && bufferSize != ZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
- throw new IllegalArgumentException("Buffer must be larger than or equal to " + ZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSize);
+ if (bufferSize < DiscordZstdDecompressor.MIN_BUFFER_SIZE && bufferSize != DiscordZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
+ throw new IllegalArgumentException("Buffer must be larger than or equal to " + DiscordZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSize);
this.bufferSize = bufferSize;
}
@Override
- public ZstdDecompressor create() {
- if (!ZstdNativesLoader.isLoaded()) {
+ public DiscordZstdDecompressor create() {
+ if (!DiscordZstdNativesLoader.isLoaded()) {
throw new IllegalStateException("Natives are not loaded yet, see ZstdNativesLoader");
}
return new ZstdJNADecompressor(bufferSize);
diff --git a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactoryProvider.java b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactoryProvider.java
index 04e5f5d..7ecf0ff 100644
--- a/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactoryProvider.java
+++ b/jna-impl/src/main/java/dev/freya02/discord/zstd/jna/ZstdJNADecompressorFactoryProvider.java
@@ -1,14 +1,12 @@
package dev.freya02.discord.zstd.jna;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
import org.jspecify.annotations.NullMarked;
@NullMarked
-public class ZstdJNADecompressorFactoryProvider implements ZstdDecompressorFactoryProvider {
+public class ZstdJNADecompressorFactoryProvider {
- @Override
- public ZstdDecompressorFactory get(int bufferSizeHint) {
+ public DiscordZstdDecompressorFactory get(int bufferSizeHint) {
return new ZstdJNADecompressorFactory(bufferSizeHint);
}
}
diff --git a/jna-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider b/jna-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
deleted file mode 100644
index af241ee..0000000
--- a/jna-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
+++ /dev/null
@@ -1 +0,0 @@
-dev.freya02.discord.zstd.jna.ZstdJNADecompressorFactoryProvider
diff --git a/jna-impl/src/test/java/dev/freya02/discord/zstd/jna/ZstdJNATest.java b/jna-impl/src/test/java/dev/freya02/discord/zstd/jna/ZstdJNATest.java
index 5ed3928..500fb0a 100644
--- a/jna-impl/src/test/java/dev/freya02/discord/zstd/jna/ZstdJNATest.java
+++ b/jna-impl/src/test/java/dev/freya02/discord/zstd/jna/ZstdJNATest.java
@@ -1,9 +1,9 @@
package dev.freya02.discord.zstd.jna;
import dev.freya02.discord.zstd.TestChunks;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import dev.freya02.discord.zstd.api.DiscordZstdNativesLoader;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -24,10 +24,10 @@ public static void setup() {
@Test
public void test_decompression() throws IOException {
- assertTrue(ZstdNativesLoader.loadFromJar());
+ assertTrue(DiscordZstdNativesLoader.loadFromJar());
- ZstdDecompressorFactory factory = new ZstdJNADecompressorFactoryProvider().get(ZstdDecompressor.DEFAULT_BUFFER_SIZE);
- ZstdDecompressor decompressor = factory.create();
+ DiscordZstdDecompressorFactory factory = new ZstdJNADecompressorFactoryProvider().get(DiscordZstdDecompressor.DEFAULT_BUFFER_SIZE);
+ DiscordZstdDecompressor decompressor = factory.create();
for (TestChunks.Chunk chunk : chunks) {
final byte[] actual = decompressor.decompress(chunk.getCompressed());
final byte[] expected = chunk.getDecompressed();
diff --git a/jni-impl/natives/include/context.hpp b/jni-impl/natives/include/context.hpp
index 54cfe14..daa52df 100644
--- a/jni-impl/natives/include/context.hpp
+++ b/jni-impl/natives/include/context.hpp
@@ -3,17 +3,17 @@
#include
-#define ZstdJNIContext_createDStream Java_dev_freya02_discord_zstd_jni_ZstdJNIContext_createDStream
-#define ZstdJNIContext_freeDStream Java_dev_freya02_discord_zstd_jni_ZstdJNIContext_freeDStream
-#define ZstdJNIContext_initDStream Java_dev_freya02_discord_zstd_jni_ZstdJNIContext_initDStream
-#define ZstdJNIContext_decompress0 Java_dev_freya02_discord_zstd_jni_ZstdJNIContext_decompress0
+#define DiscordZstdJNIContext_createDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIContext_createDStream
+#define DiscordZstdJNIContext_freeDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIContext_freeDStream
+#define DiscordZstdJNIContext_initDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIContext_initDStream
+#define DiscordZstdJNIContext_decompress0 Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIContext_decompress0
extern "C" {
-JNIEXPORT jlong JNICALL ZstdJNIContext_createDStream(JNIEnv *env, jclass obj);
+JNIEXPORT jlong JNICALL DiscordZstdJNIContext_createDStream(JNIEnv *env, jclass obj);
-JNIEXPORT void JNICALL ZstdJNIContext_freeDStream(JNIEnv *env, jclass obj, jlong zdsPtr);
+JNIEXPORT void JNICALL DiscordZstdJNIContext_freeDStream(JNIEnv *env, jclass obj, jlong zdsPtr);
-JNIEXPORT jlong JNICALL ZstdJNIContext_initDStream(JNIEnv *env, jclass obj, jlong zdsPtr);
+JNIEXPORT jlong JNICALL DiscordZstdJNIContext_initDStream(JNIEnv *env, jclass obj, jlong zdsPtr);
}
#endif //LIBZSTD_JNI_CONTEXT_HPP
diff --git a/jni-impl/natives/include/decompressor.hpp b/jni-impl/natives/include/decompressor.hpp
index d2fa2ad..0c59402 100644
--- a/jni-impl/natives/include/decompressor.hpp
+++ b/jni-impl/natives/include/decompressor.hpp
@@ -3,21 +3,25 @@
#include
+#define DiscordZstdJNIDecompressor_createDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIDecompressor_createDStream
+#define DiscordZstdJNIDecompressor_freeDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIDecompressor_freeDStream
+#define DiscordZstdJNIDecompressor_DStreamOutSize Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIDecompressor_DStreamOutSize
+#define DiscordZstdJNIDecompressor_initDStream Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIDecompressor_initDStream
+#define DiscordZstdJNIDecompressor_decompressMessage Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIDecompressor_decompressMessage
+
extern "C" {
-JNIEXPORT jlong JNICALL Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_createDStream(
- JNIEnv *env, jclass obj);
+JNIEXPORT jlong JNICALL DiscordZstdJNIDecompressor_createDStream(JNIEnv *env, jclass obj);
-JNIEXPORT jlong JNICALL Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_freeDStream(
- JNIEnv *env, jclass obj, jlong zds);
+JNIEXPORT jlong JNICALL DiscordZstdJNIDecompressor_freeDStream(JNIEnv *env, jclass obj, jlong zds);
-JNIEXPORT jint JNICALL Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_DStreamOutSize(
- JNIEnv *env, jclass obj);
+JNIEXPORT jint JNICALL DiscordZstdJNIDecompressor_DStreamOutSize(JNIEnv *env, jclass obj);
-JNIEXPORT jlong JNICALL Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_initDStream(
- JNIEnv *env, jclass obj, jlong zds);
+JNIEXPORT jlong JNICALL DiscordZstdJNIDecompressor_initDStream(JNIEnv *env, jclass obj, jlong zds);
-JNIEXPORT jbyteArray JNICALL Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_decompressMessage(
- JNIEnv *env, jclass obj, jlong zds, jbyteArray bufferArray, jbyteArray inputArray);
+JNIEXPORT jbyteArray JNICALL DiscordZstdJNIDecompressor_decompressMessage(JNIEnv *env, jclass obj,
+ jlong zds,
+ jbyteArray bufferArray,
+ jbyteArray inputArray);
}
#endif // NATIVES_DECOMPRESSOR_H
diff --git a/jni-impl/natives/include/streaming.hpp b/jni-impl/natives/include/streaming.hpp
index a5fbb26..9592e0a 100644
--- a/jni-impl/natives/include/streaming.hpp
+++ b/jni-impl/natives/include/streaming.hpp
@@ -4,9 +4,9 @@
#include
#include
-#define ZstdJNIInputStream_newContext Java_dev_freya02_discord_zstd_jni_ZstdJNIInputStream_newContext
-#define ZstdJNIInputStream_freeContext Java_dev_freya02_discord_zstd_jni_ZstdJNIInputStream_freeContext
-#define ZstdJNIInputStream_inflate0 Java_dev_freya02_discord_zstd_jni_ZstdJNIInputStream_inflate0
+#define DiscordZstdJNIInputStream_newContext Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIInputStream_newContext
+#define DiscordZstdJNIInputStream_freeContext Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIInputStream_freeContext
+#define DiscordZstdJNIInputStream_inflate0 Java_dev_freya02_discord_zstd_jni_DiscordZstdJNIInputStream_inflate0
class Context {
public:
@@ -17,14 +17,14 @@ class Context {
};
extern "C" {
-JNIEXPORT jlong JNICALL ZstdJNIInputStream_newContext(JNIEnv *env, jclass obj, jlong zdsPtr);
+JNIEXPORT jlong JNICALL DiscordZstdJNIInputStream_newContext(JNIEnv *env, jclass obj, jlong zdsPtr);
-JNIEXPORT void JNICALL ZstdJNIInputStream_freeContext(JNIEnv *env, jclass obj, jlong ctxPtr);
+JNIEXPORT void JNICALL DiscordZstdJNIInputStream_freeContext(JNIEnv *env, jclass obj, jlong ctxPtr);
-JNIEXPORT jlong JNICALL ZstdJNIInputStream_inflate0(JNIEnv *env, jclass,
- jlong ctxPtr,
- jbyteArray srcJ, jlong srcSize,
- jbyteArray dstJ, jlong dstOff, jlong dstSize);
+JNIEXPORT jlong JNICALL DiscordZstdJNIInputStream_inflate0(JNIEnv *env, jclass,
+ jlong ctxPtr,
+ jbyteArray srcJ, jlong srcSize,
+ jbyteArray dstJ, jlong dstOff, jlong dstSize);
}
#endif // NATIVES_STREAMING_HPP
diff --git a/jni-impl/natives/src/context.cpp b/jni-impl/natives/src/context.cpp
index 6e7a47b..10b51d6 100644
--- a/jni-impl/natives/src/context.cpp
+++ b/jni-impl/natives/src/context.cpp
@@ -1,16 +1,16 @@
#include
#include
-jlong ZstdJNIContext_createDStream(JNIEnv *, jclass) {
+jlong DiscordZstdJNIContext_createDStream(JNIEnv *, jclass) {
return reinterpret_cast(ZSTD_createDStream());
}
-void ZstdJNIContext_freeDStream(JNIEnv *, jclass, const jlong zdsPtr) {
+void DiscordZstdJNIContext_freeDStream(JNIEnv *, jclass, const jlong zdsPtr) {
const auto zds = reinterpret_cast(zdsPtr);
ZSTD_freeDStream(zds);
}
-jlong ZstdJNIContext_initDStream(JNIEnv *, jclass, const jlong zdsPtr) {
+jlong DiscordZstdJNIContext_initDStream(JNIEnv *, jclass, const jlong zdsPtr) {
const auto zds = reinterpret_cast(zdsPtr);
return static_cast(ZSTD_initDStream(zds));
}
diff --git a/jni-impl/natives/src/decompressor.cpp b/jni-impl/natives/src/decompressor.cpp
index 91dcbc4..9a32b12 100644
--- a/jni-impl/natives/src/decompressor.cpp
+++ b/jni-impl/natives/src/decompressor.cpp
@@ -3,28 +3,26 @@
#include
#include
-jlong Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_createDStream(
- JNIEnv *, jclass) {
+jlong DiscordZstdJNIDecompressor_createDStream(JNIEnv *, jclass) {
return reinterpret_cast(ZSTD_createDStream());
}
-jlong Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_freeDStream(
- JNIEnv *, jclass, jlong zds) {
+jlong DiscordZstdJNIDecompressor_freeDStream(JNIEnv *, jclass, jlong zds) {
return ZSTD_freeDStream(reinterpret_cast(zds));
}
-jint Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_DStreamOutSize(
- JNIEnv *, jclass) {
+jint DiscordZstdJNIDecompressor_DStreamOutSize(JNIEnv *, jclass) {
return ZSTD_DStreamOutSize();
}
-jlong Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_initDStream(
- JNIEnv *, jclass, jlong zds) {
+jlong DiscordZstdJNIDecompressor_initDStream(JNIEnv *, jclass, jlong zds) {
return ZSTD_initDStream(reinterpret_cast(zds));
}
-jbyteArray Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_decompressMessage(
- JNIEnv *env, jclass, jlong zds, jbyteArray bufferArray, jbyteArray inputArray) {
+jbyteArray DiscordZstdJNIDecompressor_decompressMessage(JNIEnv *env, jclass,
+ jlong zds,
+ jbyteArray bufferArray,
+ jbyteArray inputArray) {
ZSTD_outBuffer output;
output.dst = env->GetPrimitiveArrayCritical(bufferArray, nullptr);
output.size = env->GetArrayLength(bufferArray);
@@ -62,7 +60,7 @@ jbyteArray Java_dev_freya02_discord_zstd_jni_ZstdJNIDecompressor_decompressMessa
env->ReleasePrimitiveArrayCritical(inputArray, const_cast(input.src), 0);
const auto errorName = ZSTD_getErrorName(result);
- const auto exceptionClass = env->FindClass("dev/freya02/discord/zstd/api/ZstdException");
+ const auto exceptionClass = env->FindClass("dev/freya02/discord/zstd/api/DiscordZstdException");
env->ThrowNew(exceptionClass, errorName);
return nullptr;
diff --git a/jni-impl/natives/src/streaming.cpp b/jni-impl/natives/src/streaming.cpp
index b610b77..8a78644 100644
--- a/jni-impl/natives/src/streaming.cpp
+++ b/jni-impl/natives/src/streaming.cpp
@@ -6,17 +6,17 @@ Context::Context(ZSTD_DCtx *zds) {
this->srcPos = 0;
}
-jlong ZstdJNIInputStream_newContext(JNIEnv *, jclass, const jlong zdsPtr) {
+jlong DiscordZstdJNIInputStream_newContext(JNIEnv *, jclass, const jlong zdsPtr) {
const auto zds = reinterpret_cast(zdsPtr);
return reinterpret_cast(new Context(zds));
}
-void ZstdJNIInputStream_freeContext(JNIEnv *, jclass, const jlong ctxPtr) {
+void DiscordZstdJNIInputStream_freeContext(JNIEnv *, jclass, const jlong ctxPtr) {
const auto ctx = reinterpret_cast(ctxPtr);
delete ctx;
}
-jlong ZstdJNIInputStream_inflate0(JNIEnv *env, jclass,
+jlong DiscordZstdJNIInputStream_inflate0(JNIEnv *env, jclass,
const jlong ctxPtr,
jbyteArray srcJ, const jlong srcSize,
jbyteArray dstJ, const jlong dstOff, const jlong dstSize) {
@@ -54,7 +54,7 @@ jlong ZstdJNIInputStream_inflate0(JNIEnv *env, jclass,
if (ZSTD_isError(result)) {
const auto errorName = ZSTD_getErrorName(result);
- const auto exceptionClass = env->FindClass("dev/freya02/discord/zstd/api/ZstdException");
+ const auto exceptionClass = env->FindClass("dev/freya02/discord/zstd/api/DiscordZstdException");
env->ThrowNew(exceptionClass, errorName);
return -1;
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNI.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNI.java
new file mode 100644
index 0000000..8f4fd2d
--- /dev/null
+++ b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNI.java
@@ -0,0 +1,32 @@
+package dev.freya02.discord.zstd.jni;
+
+import dev.freya02.discord.zstd.api.*;
+import org.jspecify.annotations.NullMarked;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.io.IOException;
+
+@NullMarked
+public class DiscordZstdJNI implements DiscordZstd {
+ private static final Logger LOGGER = LoggerFactory.getLogger(DiscordZstdJNI.class);
+
+ public DiscordZstdJNI() throws IOException {
+ LOGGER.debug("Using JNI implementation of discord-zstd-java");
+
+ // Load natives if they weren't already
+ DiscordZstdNativesLoader.loadFromJar();
+ }
+
+ @Override
+ public DiscordZstdContext createContext() {
+ return new DiscordZstdJNIContext();
+ }
+
+ @Override
+ public DiscordZstdDecompressorFactory createDecompressorFactory(int bufferSizeHint) {
+ if (bufferSizeHint < DiscordZstdDecompressor.MIN_BUFFER_SIZE && bufferSizeHint != DiscordZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
+ throw new IllegalArgumentException("Buffer must be larger than or equal to " + DiscordZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSizeHint);
+ return new DiscordZstdJNIDecompressorFactory(bufferSizeHint);
+ }
+}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContext.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIContext.java
similarity index 84%
rename from jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContext.java
rename to jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIContext.java
index 38f66b5..5ab7915 100644
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContext.java
+++ b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIContext.java
@@ -1,18 +1,18 @@
package dev.freya02.discord.zstd.jni;
-import dev.freya02.discord.zstd.api.ZstdContext;
+import dev.freya02.discord.zstd.api.DiscordZstdContext;
import org.jspecify.annotations.NullMarked;
import java.io.InputStream;
@NullMarked
-public class ZstdJNIContext implements ZstdContext {
+class DiscordZstdJNIContext implements DiscordZstdContext {
private final long zds;
private boolean invalidated = false;
private boolean closed = false;
- public ZstdJNIContext() {
+ public DiscordZstdJNIContext() {
this.zds = createDStream();
}
@@ -47,7 +47,7 @@ public void reset() {
@Override
public InputStream createInputStream(byte[] input) {
- return new ZstdJNIInputStream(this, zds, input);
+ return new DiscordZstdJNIInputStream(this, zds, input);
}
private static native long createDStream();
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressor.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressor.java
similarity index 85%
rename from jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressor.java
rename to jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressor.java
index d410072..85479d6 100644
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressor.java
+++ b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressor.java
@@ -1,6 +1,6 @@
package dev.freya02.discord.zstd.jni;
-import dev.freya02.discord.zstd.api.ZstdException;
+import dev.freya02.discord.zstd.api.DiscordZstdException;
import dev.freya02.discord.zstd.internal.AbstractZstdDecompressor;
import org.jspecify.annotations.NullMarked;
import org.slf4j.Logger;
@@ -9,9 +9,9 @@
import java.util.Arrays;
@NullMarked
-public class ZstdJNIDecompressor extends AbstractZstdDecompressor {
+class DiscordZstdJNIDecompressor extends AbstractZstdDecompressor {
- private static final Logger LOG = LoggerFactory.getLogger(ZstdJNIDecompressor.class);
+ private static final Logger LOG = LoggerFactory.getLogger(DiscordZstdJNIDecompressor.class);
private final long zds;
private final byte[] buffer;
@@ -19,7 +19,7 @@ public class ZstdJNIDecompressor extends AbstractZstdDecompressor {
private boolean invalidated = false;
private boolean closed = false;
- protected ZstdJNIDecompressor(int bufferSizeHint)
+ protected DiscordZstdJNIDecompressor(int bufferSizeHint)
{
this.zds = createDStream();
@@ -68,7 +68,7 @@ public byte[] decompress(byte[] data)
try {
return decompressMessage(zds, buffer, data);
- } catch (ZstdException e) {
+ } catch (DiscordZstdException e) {
invalidated = true;
throw e;
}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressorFactory.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressorFactory.java
new file mode 100644
index 0000000..a3f21f4
--- /dev/null
+++ b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIDecompressorFactory.java
@@ -0,0 +1,20 @@
+package dev.freya02.discord.zstd.jni;
+
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import org.jspecify.annotations.NullMarked;
+
+@NullMarked
+class DiscordZstdJNIDecompressorFactory implements DiscordZstdDecompressorFactory {
+
+ private final int bufferSizeHint;
+
+ protected DiscordZstdJNIDecompressorFactory(int bufferSizeHint) {
+ this.bufferSizeHint = bufferSizeHint;
+ }
+
+ @Override
+ public DiscordZstdDecompressor create() {
+ return new DiscordZstdJNIDecompressor(bufferSizeHint);
+ }
+}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIInputStream.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIInputStream.java
similarity index 84%
rename from jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIInputStream.java
rename to jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIInputStream.java
index 5305365..f76dd0d 100644
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIInputStream.java
+++ b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/DiscordZstdJNIInputStream.java
@@ -1,15 +1,15 @@
package dev.freya02.discord.zstd.jni;
-import dev.freya02.discord.zstd.api.ZstdException;
+import dev.freya02.discord.zstd.api.DiscordZstdException;
import org.jspecify.annotations.NullMarked;
import java.io.IOException;
import java.io.InputStream;
@NullMarked
-public class ZstdJNIInputStream extends InputStream {
+class DiscordZstdJNIInputStream extends InputStream {
- private final ZstdJNIContext context;
+ private final DiscordZstdJNIContext context;
private final long nativeContextPtr;
private final byte[] input;
@@ -17,7 +17,7 @@ public class ZstdJNIInputStream extends InputStream {
private boolean closed = false;
- protected ZstdJNIInputStream(ZstdJNIContext context, long zds, byte[] input) {
+ protected DiscordZstdJNIInputStream(DiscordZstdJNIContext context, long zds, byte[] input) {
this.context = context;
this.nativeContextPtr = newContext(zds);
this.input = input;
@@ -51,7 +51,7 @@ public int read(byte[] b, int off, int len) throws IOException {
try {
return (int) inflate0(nativeContextPtr, input, inputSize, b, off, len);
- } catch (ZstdException e) {
+ } catch (DiscordZstdException e) {
context.invalidate();
throw new RuntimeException(e);
}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactory.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactory.java
deleted file mode 100644
index 3b023b0..0000000
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactory.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.freya02.discord.zstd.jni;
-
-import dev.freya02.discord.zstd.api.ZstdContext;
-import dev.freya02.discord.zstd.api.ZstdContextFactory;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdJNIContextFactory implements ZstdContextFactory {
- @Override
- public ZstdContext create() {
- return new ZstdJNIContext();
- }
-}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactoryProvider.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactoryProvider.java
deleted file mode 100644
index 1167f2b..0000000
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIContextFactoryProvider.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package dev.freya02.discord.zstd.jni;
-
-import dev.freya02.discord.zstd.api.ZstdContextFactory;
-import dev.freya02.discord.zstd.api.ZstdContextFactoryProvider;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdJNIContextFactoryProvider implements ZstdContextFactoryProvider {
- @Override
- public ZstdContextFactory get() {
- return new ZstdJNIContextFactory();
- }
-}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactory.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactory.java
deleted file mode 100644
index 4e8e676..0000000
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactory.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package dev.freya02.discord.zstd.jni;
-
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdJNIDecompressorFactory implements ZstdDecompressorFactory {
-
- private final int bufferSize;
-
- protected ZstdJNIDecompressorFactory(int bufferSize) {
- if (bufferSize < ZstdDecompressor.MIN_BUFFER_SIZE && bufferSize != ZstdDecompressor.ZSTD_RECOMMENDED_BUFFER_SIZE)
- throw new IllegalArgumentException("Buffer must be larger than or equal to " + ZstdDecompressor.MIN_BUFFER_SIZE + ", provided " + bufferSize);
- this.bufferSize = bufferSize;
- }
-
- @Override
- public ZstdDecompressor create() {
- if (!ZstdNativesLoader.isLoaded()) {
- throw new IllegalStateException("Natives are not loaded yet, see ZstdNativesLoader");
- }
- return new ZstdJNIDecompressor(bufferSize);
- }
-}
diff --git a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactoryProvider.java b/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactoryProvider.java
deleted file mode 100644
index df83c6d..0000000
--- a/jni-impl/src/main/java/dev/freya02/discord/zstd/jni/ZstdJNIDecompressorFactoryProvider.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package dev.freya02.discord.zstd.jni;
-
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider;
-import org.jspecify.annotations.NullMarked;
-
-@NullMarked
-public class ZstdJNIDecompressorFactoryProvider implements ZstdDecompressorFactoryProvider {
-
- @Override
- public ZstdDecompressorFactory get(int bufferSizeHint) {
- return new ZstdJNIDecompressorFactory(bufferSizeHint);
- }
-}
diff --git a/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd b/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd
new file mode 100644
index 0000000..2dfff2d
--- /dev/null
+++ b/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.DiscordZstd
@@ -0,0 +1 @@
+dev.freya02.discord.zstd.jni.DiscordZstdJNI
diff --git a/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider b/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider
deleted file mode 100644
index 1ff1322..0000000
--- a/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdContextFactoryProvider
+++ /dev/null
@@ -1 +0,0 @@
-dev.freya02.discord.zstd.jni.ZstdJNIContextFactoryProvider
diff --git a/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider b/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
deleted file mode 100644
index e29ca8a..0000000
--- a/jni-impl/src/main/resources/META-INF/services/dev.freya02.discord.zstd.api.ZstdDecompressorFactoryProvider
+++ /dev/null
@@ -1 +0,0 @@
-dev.freya02.discord.zstd.jni.ZstdJNIDecompressorFactoryProvider
diff --git a/jni-impl/src/test/java/dev/freya02/discord/zstd/jni/ZstdJNITest.java b/jni-impl/src/test/java/dev/freya02/discord/zstd/jni/ZstdJNITest.java
index 3f6ea73..117508e 100644
--- a/jni-impl/src/test/java/dev/freya02/discord/zstd/jni/ZstdJNITest.java
+++ b/jni-impl/src/test/java/dev/freya02/discord/zstd/jni/ZstdJNITest.java
@@ -1,9 +1,10 @@
package dev.freya02.discord.zstd.jni;
import dev.freya02.discord.zstd.TestChunks;
-import dev.freya02.discord.zstd.api.ZstdDecompressor;
-import dev.freya02.discord.zstd.api.ZstdDecompressorFactory;
-import dev.freya02.discord.zstd.api.ZstdNativesLoader;
+import dev.freya02.discord.zstd.api.DiscordZstdContext;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressor;
+import dev.freya02.discord.zstd.api.DiscordZstdDecompressorFactory;
+import dev.freya02.discord.zstd.api.DiscordZstdProvider;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
@@ -18,15 +19,14 @@ public class ZstdJNITest {
private static List chunks;
@BeforeAll
- public static void setup() throws IOException {
+ public static void setup() {
chunks = TestChunks.get(TestChunks.Compression.ZSTD);
- ZstdNativesLoader.loadFromJar();
}
@Test
public void test_decompression() {
- ZstdDecompressorFactory factory = new ZstdJNIDecompressorFactoryProvider().get(ZstdDecompressor.DEFAULT_BUFFER_SIZE);
- ZstdDecompressor decompressor = factory.create();
+ DiscordZstdDecompressorFactory factory = DiscordZstdProvider.get().createDecompressorFactory(DiscordZstdDecompressor.DEFAULT_BUFFER_SIZE);
+ DiscordZstdDecompressor decompressor = factory.create();
for (TestChunks.Chunk chunk : chunks) {
final byte[] actual = decompressor.decompress(chunk.getCompressed());
final byte[] expected = chunk.getDecompressed();
@@ -36,7 +36,7 @@ public void test_decompression() {
@Test
public void test_input_stream() throws IOException {
- final ZstdJNIContext context = new ZstdJNIContext();
+ DiscordZstdContext context = DiscordZstdProvider.get().createContext();
for (TestChunks.Chunk chunk : chunks) {
try (InputStream stream = context.createInputStream(chunk.getCompressed())) {
final byte[] actual = stream.readAllBytes();