ocibuild_compress (ocibuild v0.10.4)

View Source

Compression abstraction with automatic OTP version detection.

This module provides a unified compression API that automatically selects the best available compression algorithm based on the OTP version:

  • OTP 28+: zstd available (20-50% smaller, 5-10x faster decompression)
  • OTP 27: gzip only

Usage

%% Auto-select best available compression
{ok, Compressed} = ocibuild_compress:compress(Data, auto).

%% Explicit compression selection
{ok, Compressed} = ocibuild_compress:compress(Data, gzip).
{ok, Compressed} = ocibuild_compress:compress(Data, zstd).  % Fails on OTP 27

%% Check availability
true = ocibuild_compress:is_available(gzip).
false = ocibuild_compress:is_available(zstd).  % On OTP 27

%% Get default compression for current OTP
gzip = ocibuild_compress:default().  % On OTP 27
zstd = ocibuild_compress:default().  % On OTP 28+

Summary

Functions

Compress data using the specified algorithm.

Returns the best available compression for the current OTP version.

Check if a compression algorithm is available on the current OTP version.

Resolve auto to the actual compression algorithm.

Types

compression()

-type compression() :: gzip | zstd | auto.

resolved_compression()

-type resolved_compression() :: gzip | zstd.

Functions

compress(Data, Compression)

-spec compress(Data, Compression) -> Result
                  when
                      Data :: iodata(),
                      Compression :: compression(),
                      Result :: {ok, binary()} | {error, term()}.

Compress data using the specified algorithm.

Returns {ok, CompressedData} on success, or {error, Reason} on failure.

%% Auto-select best available
{ok, Compressed} = ocibuild_compress:compress(Data, auto).

%% Explicit gzip (always available)
{ok, Compressed} = ocibuild_compress:compress(Data, gzip).

%% Explicit zstd (OTP 28+ only)
{ok, Compressed} = ocibuild_compress:compress(Data, zstd).
{error, {zstd_not_available, otp_version, "27"}} = ...  % On OTP 27

default()

-spec default() -> resolved_compression().

Returns the best available compression for the current OTP version.

Returns zstd on OTP 28+ (better compression ratio and faster decompression), or gzip on OTP 27 and earlier.

is_available/1

-spec is_available(compression()) -> boolean().

Check if a compression algorithm is available on the current OTP version.

true = ocibuild_compress:is_available(gzip).   % Always available
true = ocibuild_compress:is_available(auto).   % Always available
true = ocibuild_compress:is_available(zstd).   % Only on OTP 28+

resolve/1

-spec resolve(compression()) -> resolved_compression().

Resolve auto to the actual compression algorithm.

gzip = ocibuild_compress:resolve(auto).  % On OTP 27
zstd = ocibuild_compress:resolve(auto).  % On OTP 28+
gzip = ocibuild_compress:resolve(gzip).
zstd = ocibuild_compress:resolve(zstd).