-module(gliff@internal@budget).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/gliff/internal/budget.gleam").
-export([from_max/1, tick/1]).
-export_type([budget/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.
?MODULEDOC(false).
-type budget() :: unlimited | {limited, integer()}.
-file("src/gliff/internal/budget.gleam", 6).
?DOC(false).
-spec from_max(integer()) -> budget().
from_max(Max) ->
case Max =< 0 of
true ->
unlimited;
false ->
{limited, Max}
end.
-file("src/gliff/internal/budget.gleam", 13).
?DOC(false).
-spec tick(budget()) -> {ok, budget()} | {error, nil}.
tick(Budget) ->
case Budget of
unlimited ->
{ok, unlimited};
{limited, Remaining} when Remaining > 0 ->
{ok, {limited, Remaining - 1}};
{limited, _} ->
{error, nil}
end.