Current section

Files

Jump to
gladvent src runners.erl
Raw

src/runners.erl

-module(runners).
-compile(no_auto_import).
-export([build_from_days_dir/0]).
-spec to_module_name(binary()) -> binary().
to_module_name(File) ->
_pipe = File,
_pipe@1 = gleam@string:replace(_pipe, <<".gleam"/utf8>>, <<""/utf8>>),
_pipe@2 = gleam@string:replace(_pipe@1, <<".erl"/utf8>>, <<""/utf8>>),
gleam@string:replace(_pipe@2, <<"/"/utf8>>, <<"@"/utf8>>).
-spec function_exists(binary(), gleam@erlang@atom:atom_(), binary()) -> {ok,
fun((binary()) -> gleam@dynamic:dynamic())} |
{error, snag:snag()}.
function_exists(Filename, Mod, Func_name) ->
case gladvent_ffi:module_exists(Mod) of
false ->
_pipe = [<<"module "/utf8>>, Filename, <<" not found"/utf8>>],
_pipe@1 = gleam@string:concat(_pipe),
snag:error(_pipe@1);
true ->
_pipe@2 = Func_name,
_pipe@3 = erlang:binary_to_atom(_pipe@2),
_pipe@4 = gladvent_ffi:function_arity_one_exists(Mod, _pipe@3),
_pipe@5 = gleam@result:replace_error(
_pipe@4,
snag:new(
<<<<<<<<<<"module "/utf8, "src/days/"/utf8>>/binary,
Filename/binary>>/binary,
" does not export a function \""/utf8>>/binary,
Func_name/binary>>/binary,
"/1\""/utf8>>
)
),
snag:context(_pipe@5, <<"function missing"/utf8>>)
end.
-spec get_runner(binary()) -> {ok,
{integer(),
{fun((binary()) -> gleam@dynamic:dynamic()),
fun((binary()) -> gleam@dynamic:dynamic())}}} |
{error, snag:snag()}.
get_runner(Filename) ->
case begin
_pipe = gleam@string:replace(Filename, <<"day_"/utf8>>, <<""/utf8>>),
_pipe@1 = gleam@string:replace(_pipe, <<".gleam"/utf8>>, <<""/utf8>>),
_pipe@2 = parse:day(_pipe@1),
snag:context(
_pipe@2,
gleam@string:append(<<"cannot create runner for "/utf8>>, Filename)
)
end of
{error, _try} -> {error, _try};
{ok, Day} ->
Module = begin
_pipe@3 = Filename,
_pipe@4 = gleam@string:append(<<"days/"/utf8>>, _pipe@3),
_pipe@5 = to_module_name(_pipe@4),
erlang:binary_to_atom(_pipe@5)
end,
case function_exists(Filename, Module, <<"pt_1"/utf8>>) of
{error, _try@1} -> {error, _try@1};
{ok, Pt_1} ->
case function_exists(Filename, Module, <<"pt_2"/utf8>>) of
{error, _try@2} -> {error, _try@2};
{ok, Pt_2} ->
{ok, {Day, {Pt_1, Pt_2}}}
end
end
end.
-spec build_from_days_dir() -> {ok,
gleam@map:map_(integer(), {fun((binary()) -> gleam@dynamic:dynamic()),
fun((binary()) -> gleam@dynamic:dynamic())})} |
{error, snag:snag()}.
build_from_days_dir() ->
_pipe = gladvent_ffi:find_files(
<<"day_*.gleam"/utf8>>,
<<"src/days/"/utf8>>
),
_pipe@1 = gleam@list:try_map(_pipe, fun get_runner/1),
_pipe@2 = gleam@result:map(_pipe@1, fun gleam@map:from_list/1),
snag:context(
_pipe@2,
<<"failed to generate runners list from filesystem"/utf8>>
).