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:
aarch64-apple-darwin- MacOS running on ARM 64 bits CPUs.aarch64-unknown-linux-gnu- Linux running on ARM 64 bits CPUs, compiled with GCC.aarch64-unknown-linux-musl- Linux running on ARM 64 bits CPUs, compiled with Musl.x86_64-apple-darwin- MacOS running on Intel/AMD 64 bits CPUs.x86_64-pc-windows-msvc- Windows running on Intel/AMD 64 bits CPUs, compiled with Visual C++.x86_64-pc-windows-gnu- Windows running on Intel/AMD 64 bits CPUs, compiled with GCC.x86_64-unknown-linux-gnu- Linux running on Intel/AMD 64 bits CPUs, compiled with GCC.x86_64-unknown-linux-musl- Linux running on Intel/AMD 64 bits CPUs, compiled with Musl.x86_64-unknown-freebsd- FreeBSD running on Intel/AMD 64 bits.
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.checkLicense
MIT License - See LICENSE for details.