CIDocumentationPackage

LZMA

LZMA compression library for Elixir.

Installation

Add lzma to your list of dependencies in mix.exs:

def deps do
  [
    {:lzma, "~> 0.1"}
  ]
end

LZMA will download a precompiled version of its native code upon installation. You can force a local build by setting the environment variable LZMA_EX_BUILD=1 and including :rustler as a dependency:

  {:lzma, "~> 0.1", system_env: %{"LZMA_EX_BUILD" => "1"}},
  {:rustler, ">= 0.0.0"}

If necessary, clean up before rebuilding with mix deps.clean lzma.

Usage

XZ Format

# Compress data
{:ok, compressed} = LZMA.xz_compress("Hello World")

# Decompress data
{:ok, original} = LZMA.xz_decompress(compressed)

# Bang versions (raise on error)
compressed = LZMA.xz_compress!("Hello World")
original = LZMA.xz_decompress!(compressed)

LZMA Format

# Compress data
{:ok, compressed} = LZMA.lzma_compress("Hello World")

# Decompress data
{:ok, original} = LZMA.lzma_decompress(compressed)

# Bang versions
compressed = LZMA.lzma_compress!("Hello World")
original = LZMA.lzma_decompress!(compressed)

LZMA2 Format

# Compress data
{:ok, compressed} = LZMA.lzma2_compress("Hello World")

# Decompress data
{:ok, original} = LZMA.lzma2_decompress(compressed)

# Bang versions
compressed = LZMA.lzma2_compress!("Hello World")
original = LZMA.lzma2_decompress!(compressed)

Working with Binary Data

# Compress binary data
binary_data = File.read!("large_file.txt")
{:ok, compressed} = LZMA.xz_compress(binary_data)

# Save compressed data
File.write!("large_file.txt.xz", compressed)

# Decompress later
compressed = File.read!("large_file.txt.xz")
{:ok, original} = LZMA.xz_decompress(compressed)

Precompilation

LZMA ships with the NIF code precompiled for the most popular architectures out there. We support the following:

This means that LZMA is going to work without the need to compile it from source.

This currently only works for Hex releases. For more information on how it works, please check the RustlerPrecompiled project.

Development

Building Locally

# Install dependencies
mix deps.get

# Force local build
LZMA_EX_BUILD=1 mix compile

# Run tests
mix test

# Run all checks
mix ci.check

License

MIT License - See LICENSE for details.