-module(packkit@level).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/packkit/level.gleam").
-export([store/0, fast/0, default/0, balanced/0, best/0, custom_checked/1, custom/1, value/1, label/1]).
-export_type([level/0, level_error/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.
-opaque level() :: {level, integer(), binary()}.
-type level_error() :: {level_out_of_range, integer()}.
-file("src/packkit/level.gleam", 16).
?DOC(" Zero-compression / store mode.\n").
-spec store() -> level().
store() ->
{level, 0, <<"store"/utf8>>}.
-file("src/packkit/level.gleam", 21).
?DOC(" Fastest practical compression setting.\n").
-spec fast() -> level().
fast() ->
{level, 1, <<"fast"/utf8>>}.
-file("src/packkit/level.gleam", 26).
?DOC(" Project-default balanced setting.\n").
-spec default() -> level().
default() ->
{level, 6, <<"default"/utf8>>}.
-file("src/packkit/level.gleam", 31).
?DOC(" Human-friendly balanced alias.\n").
-spec balanced() -> level().
balanced() ->
default().
-file("src/packkit/level.gleam", 36).
?DOC(" Highest generic compression setting.\n").
-spec best() -> level().
best() ->
{level, 9, <<"best"/utf8>>}.
-file("src/packkit/level.gleam", 42).
?DOC(
" Build a custom level or return a typed error when it falls outside\n"
" the current generic range of `0..9`.\n"
).
-spec custom_checked(integer()) -> {ok, level()} | {error, level_error()}.
custom_checked(Value) ->
gleam@bool:guard(
(Value < 0) orelse (Value > 9),
{error, {level_out_of_range, Value}},
fun() ->
{ok,
{level,
Value,
<<"custom-"/utf8, (erlang:integer_to_binary(Value))/binary>>}}
end
).
-file("src/packkit/level.gleam", 51).
?DOC(" Panicking counterpart of `custom_checked`.\n").
-spec custom(integer()) -> level().
custom(Value) ->
case custom_checked(Value) of
{ok, Level} ->
Level;
{error, {level_out_of_range, _}} ->
erlang:error(#{gleam_error => panic,
message => <<"packkit/level.custom: level must be in the inclusive range 0..9"/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"packkit/level"/utf8>>,
function => <<"custom"/utf8>>,
line => 55})
end.
-file("src/packkit/level.gleam", 60).
?DOC(" Numeric value for a level.\n").
-spec value(level()) -> integer().
value(Level) ->
erlang:element(2, Level).
-file("src/packkit/level.gleam", 65).
?DOC(" Stable string label for docs, tests, and diagnostics.\n").
-spec label(level()) -> binary().
label(Level) ->
erlang:element(3, Level).