Current section
Files
Jump to
Current section
Files
lib/mongo/compressor.ex
defmodule Mongo.Compressor do
@moduledoc false
@zlib_compressor_id 2
@zstd_module Enum.find([:zstd, :ezstd], &Code.ensure_loaded?/1)
if @zstd_module do
@zstd_compressor_id 3
end
def zstd_available?, do: not is_nil(@zstd_module)
def compressors, do: if(zstd_available?(), do: ["zstd", "zlib"], else: ["zlib"])
def compress(binary, :zlib) do
{@zlib_compressor_id, :zlib.compress(binary)}
end
if @zstd_module do
def compress(binary, :zstd) when is_binary(binary) do
{@zstd_compressor_id, @zstd_module.compress(binary)}
end
def compress(iodata, :zstd) when is_list(iodata) do
{@zstd_compressor_id,
iodata
|> IO.iodata_to_binary()
|> @zstd_module.compress()}
end
end
def uncompress(binary, @zlib_compressor_id) do
:zlib.uncompress(binary)
end
if @zstd_module do
def uncompress(binary, @zstd_compressor_id) do
@zstd_module.decompress(binary)
end
end
def uncompress(binary, :zlib) do
:zlib.uncompress(binary)
end
if @zstd_module do
def uncompress(binary, :zstd) do
@zstd_module.decompress(binary)
end
end
end