src/gliff@internal@budget.erl

-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.