diff --git a/include/gzip_helper.hpp b/include/gzip_helper.hpp
deleted file mode 100644
index be13809..0000000
--- a/include/gzip_helper.hpp
+++ /dev/null
@@ -1,65 +0,0 @@
-#pragma once
-
-#include <zlib.h>
-
-#include <cstring>
-#include <string>
-
-inline bool gzipInflate(const std::string& compressedBytes,
-                        std::string& uncompressedBytes)
-{
-    if (compressedBytes.empty())
-    {
-        uncompressedBytes = compressedBytes;
-        return true;
-    }
-
-    uncompressedBytes.clear();
-
-    unsigned half_length = compressedBytes.size() / 2;
-
-    z_stream strm{};
-
-    // The following line is nolint because we're declaring away constness.
-    // It's not clear why the input buffers on zlib aren't const, so this is a
-    // bit of a cheat for the moment
-    strm.next_in = (Bytef*)compressedBytes.data(); // NOLINT
-    strm.avail_in = compressedBytes.size();
-    strm.total_out = 0;
-    strm.zalloc = Z_NULL;
-    strm.zfree = Z_NULL;
-
-    bool done = false;
-
-    if (inflateInit2(&strm, (16 + MAX_WBITS)) != Z_OK)
-    {
-        return false;
-    }
-
-    while (!done)
-    {
-        // If our output buffer is too small
-        if (strm.total_out >= uncompressedBytes.size())
-        {
-            uncompressedBytes.resize(uncompressedBytes.size() + half_length);
-        }
-
-        strm.next_out =
-            (Bytef*)(uncompressedBytes.data() + strm.total_out); // NOLINT
-        strm.avail_out =
-            ((uLong)uncompressedBytes.size() - strm.total_out); // NOLINT
-
-        // Inflate another chunk.
-        int err = inflate(&strm, Z_SYNC_FLUSH);
-        if (err == Z_STREAM_END)
-        {
-            done = true;
-        }
-        else if (err != Z_OK)
-        {
-            break;
-        }
-    }
-
-    return inflateEnd(&strm) == Z_OK;
-}
\ No newline at end of file
