lib/z_standard.ex

defmodule ZStandard do
  @moduledoc ~S"""
  ZStandard compression and decompression.

  For more information see: [ZStandard](https://facebook.github.io/zstd/).
  """
  @on_load :load_nif

  @doc false
  @spec load_nif :: :ok | no_return
  def load_nif do
    path = :filename.join(:code.priv_dir(:z_standard), 'z_standard_nif')
    :ok = :erlang.load_nif(path, 0)
  end

  @doc ~S"""
  Compress uncompressed data with a compression level of `1`.

  See: `compress/2` to set a specific compression level between 0 - 22.
  """
  @spec compress(uncompressed :: binary) :: binary
  def compress(uncompressed), do: compress(uncompressed, 1)

  @doc ~S"""
  Compress uncompressed data with the given level of compression.
  """
  @spec compress(uncompressed :: binary, level :: 0..22) :: binary
  def compress(uncompressed, level)
  def compress(_, _), do: :erlang.nif_error(__ENV__.line)

  @doc ~S"""
  Decompress compressed data.
  """
  @spec decompress(compressed :: binary) :: binary
  def decompress(compressed)
  def decompress(_), do: :erlang.nif_error(__ENV__.line)
end