-module(automata@cron@normalize).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/automata/cron/normalize.gleam").
-export([normalize/1]).
-export_type([int_set/0, cron_plan/0]).
-type int_set() :: {any_value, integer(), integer()} | {values, list(integer())}.
-type cron_plan() :: {cron_plan,
int_set(),
int_set(),
int_set(),
int_set(),
int_set()}.
-file("src/automata/cron/normalize.gleam", 28).
-spec normalize_selector(
automata@cron@validator:selector(),
integer(),
integer(),
boolean()
) -> int_set().
normalize_selector(Selector, Min, Max, Normalize_day_of_week) ->
case Selector of
any ->
{any_value, Min, Max};
_ ->
{values,
automata@cron@validator:selector_values(
Selector,
Min,
Max,
Normalize_day_of_week
)}
end.
-file("src/automata/cron/normalize.gleam", 18).
-spec normalize(automata@cron@validator:valid_cron()) -> cron_plan().
normalize(Spec) ->
{cron_plan,
normalize_selector(automata@cron@validator:minute(Spec), 0, 59, false),
normalize_selector(automata@cron@validator:hour(Spec), 0, 23, false),
normalize_selector(
automata@cron@validator:day_of_month(Spec),
1,
31,
false
),
normalize_selector(automata@cron@validator:month(Spec), 1, 12, false),
normalize_selector(
automata@cron@validator:day_of_week(Spec),
0,
6,
true
)}.