-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 define a \"pub fn "/utf8>>/binary, Func_name/binary>>/binary, "(String) -> Int\""/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>> ).