-module(packkit@codec).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/packkit/codec.gleam").
-export([identity/0, lz4/0, snappy/0, lzw/0, dictionary/1, dictionary_bytes/1, with_level/2, clear_level/1, with_dictionary/2, clear_dictionary/1, kind/1, name/1, level/1, gzip/0, zlib/0, deflate/0, bzip2/0, xz/0, brotli/0, zstd/0, dictionary_of/1, has_dictionary/1]).
-export_type([codec_kind/0, dictionary/0, codec/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
-type codec_kind() :: identity |
deflate |
zlib |
gzip |
lz4 |
snappy |
bzip2 |
lzw |
xz |
zstd |
brotli.
-opaque dictionary() :: {dictionary, bitstring()}.
-opaque codec() :: {codec,
codec_kind(),
gleam@option:option(packkit@level:level()),
gleam@option:option(dictionary())}.
-file("src/packkit/codec.gleam", 36).
?DOC(" No-op codec useful for testing and raw recipe assembly.\n").
-spec identity() -> codec().
identity() ->
{codec, identity, none, none}.
-file("src/packkit/codec.gleam", 56).
?DOC(" LZ4 frame format.\n").
-spec lz4() -> codec().
lz4() ->
{codec, lz4, none, none}.
-file("src/packkit/codec.gleam", 61).
?DOC(" Snappy framed format.\n").
-spec snappy() -> codec().
snappy() ->
{codec, snappy, none, none}.
-file("src/packkit/codec.gleam", 88).
?DOC(" Unix LZW `.Z` stream.\n").
-spec lzw() -> codec().
lzw() ->
{codec, lzw, none, none}.
-file("src/packkit/codec.gleam", 93).
?DOC(" Build a dictionary value from raw bytes.\n").
-spec dictionary(bitstring()) -> dictionary().
dictionary(Bytes) ->
{dictionary, Bytes}.
-file("src/packkit/codec.gleam", 98).
?DOC(" Access the raw bytes stored in a dictionary.\n").
-spec dictionary_bytes(dictionary()) -> bitstring().
dictionary_bytes(Dict) ->
erlang:element(2, Dict).
-file("src/packkit/codec.gleam", 103).
?DOC(" Override the codec's compression level.\n").
-spec with_level(codec(), packkit@level:level()) -> codec().
with_level(Codec, Level) ->
{codec, erlang:element(2, Codec), {some, Level}, erlang:element(4, Codec)}.
-file("src/packkit/codec.gleam", 108).
?DOC(" Remove any explicit level override.\n").
-spec clear_level(codec()) -> codec().
clear_level(Codec) ->
{codec, erlang:element(2, Codec), none, erlang:element(4, Codec)}.
-file("src/packkit/codec.gleam", 113).
?DOC(" Attach a preset dictionary.\n").
-spec with_dictionary(codec(), dictionary()) -> codec().
with_dictionary(Codec, Dictionary) ->
{codec,
erlang:element(2, Codec),
erlang:element(3, Codec),
{some, Dictionary}}.
-file("src/packkit/codec.gleam", 118).
?DOC(" Remove any preset dictionary.\n").
-spec clear_dictionary(codec()) -> codec().
clear_dictionary(Codec) ->
{codec, erlang:element(2, Codec), erlang:element(3, Codec), none}.
-file("src/packkit/codec.gleam", 123).
?DOC(" Internal tagged kind for the codec family.\n").
-spec kind(codec()) -> codec_kind().
kind(Codec) ->
erlang:element(2, Codec).
-file("src/packkit/codec.gleam", 129).
?DOC(
" Codec family name. Kept for diagnostics and `description` output;\n"
" internal dispatch uses [kind].\n"
).
-spec name(codec()) -> binary().
name(Codec) ->
case erlang:element(2, Codec) of
identity ->
<<"identity"/utf8>>;
deflate ->
<<"deflate"/utf8>>;
zlib ->
<<"zlib"/utf8>>;
gzip ->
<<"gzip"/utf8>>;
lz4 ->
<<"lz4"/utf8>>;
snappy ->
<<"snappy"/utf8>>;
bzip2 ->
<<"bzip2"/utf8>>;
lzw ->
<<"lzw"/utf8>>;
xz ->
<<"xz"/utf8>>;
zstd ->
<<"zstd"/utf8>>;
brotli ->
<<"brotli"/utf8>>
end.
-file("src/packkit/codec.gleam", 146).
?DOC(" Optional level override.\n").
-spec level(codec()) -> gleam@option:option(packkit@level:level()).
level(Codec) ->
erlang:element(3, Codec).
-file("src/packkit/codec.gleam", 41).
?DOC(" Gzip wrapper over deflate.\n").
-spec gzip() -> codec().
gzip() ->
{codec, gzip, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 46).
?DOC(" Zlib wrapper over deflate.\n").
-spec zlib() -> codec().
zlib() ->
{codec, zlib, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 51).
?DOC(" Raw deflate stream.\n").
-spec deflate() -> codec().
deflate() ->
{codec, deflate, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 68).
?DOC(
" BZip2 stream. Defaults to level 9 (900 KiB block size) to match\n"
" the canonical `bzip2` default and the level `bzip2.encode` uses\n"
" when no level is supplied explicitly.\n"
).
-spec bzip2() -> codec().
bzip2() ->
{codec, bzip2, {some, packkit@level:custom(9)}, none}.
-file("src/packkit/codec.gleam", 73).
?DOC(" XZ stream.\n").
-spec xz() -> codec().
xz() ->
{codec, xz, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 78).
?DOC(" Brotli stream.\n").
-spec brotli() -> codec().
brotli() ->
{codec, brotli, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 83).
?DOC(" Zstandard stream.\n").
-spec zstd() -> codec().
zstd() ->
{codec, zstd, {some, packkit@level:default()}, none}.
-file("src/packkit/codec.gleam", 151).
?DOC(" Optional dictionary.\n").
-spec dictionary_of(codec()) -> gleam@option:option(dictionary()).
dictionary_of(Codec) ->
erlang:element(4, Codec).
-file("src/packkit/codec.gleam", 156).
?DOC(" `True` when a codec carries a preset dictionary.\n").
-spec has_dictionary(codec()) -> boolean().
has_dictionary(Codec) ->
case erlang:element(4, Codec) of
{some, _} ->
true;
none ->
false
end.