-module(proute). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/proute.gleam"). -export([run_config/1, main/0]). -export_type([generated_mount/0, generated_file/0, proute_error/0]). -type generated_mount() :: {generated_mount, list(generated_file())}. -type generated_file() :: {generated_file, binary(), binary()}. -type proute_error() :: {config_error, proute@config:config_error()} | {discovery_error, proute@discover:discover_error()} | {validation_errors, list(proute@validate@pages:validation_error())} | {write_error, binary()}. -file("src/proute.gleam", 137). -spec describe_error(proute_error()) -> binary(). describe_error(Error) -> case Error of {config_error, Error@1} -> proute@config:describe_error(Error@1); {discovery_error, Error@2} -> proute@discover:describe_error(Error@2); {validation_errors, Errors} -> _pipe = Errors, _pipe@1 = gleam@list:map( _pipe, fun proute@validate@pages:describe_error/1 ), gleam@string:join(_pipe@1, <<"\n"/utf8>>); {write_error, Path} -> <<<<"Could not write generated file "/utf8, (gleam@string:inspect(Path))/binary>>/binary, "."/utf8>> end. -file("src/proute.gleam", 127). -spec write_file(binary(), binary()) -> {ok, nil} | {error, proute_error()}. write_file(Path, Contents) -> gleam@result:'try'( begin _pipe = simplifile:create_directory_all( filepath:directory_name(Path) ), gleam@result:map_error(_pipe, fun(_) -> {write_error, Path} end) end, fun(_) -> _pipe@1 = simplifile:write(Path, Contents), gleam@result:map_error(_pipe@1, fun(_) -> {write_error, Path} end) end ). -file("src/proute.gleam", 113). -spec write_all(list(generated_file())) -> {ok, list(generated_file())} | {error, proute_error()}. write_all(Files) -> gleam@result:'try'( begin _pipe = Files, gleam@list:try_map( _pipe, fun(File) -> {generated_file, Path, Contents} = File, write_file(Path, Contents) end ) end, fun(_) -> {ok, Files} end ). -file("src/proute.gleam", 81). -spec generate_mount(proute@config:mount()) -> {ok, generated_mount()} | {error, proute_error()}. generate_mount(Mount) -> gleam@result:'try'( begin _pipe = proute@discover:discover_mount(Mount), gleam@result:map_error( _pipe, fun(Field@0) -> {discovery_error, Field@0} end ) end, fun(Mount_routes) -> gleam@result:'try'( begin _pipe@1 = proute@validate@pages:validate_mount(Mount_routes), gleam@result:map_error( _pipe@1, fun(Field@0) -> {validation_errors, Field@0} end ) end, fun(Page_modules) -> {ok, {generated_mount, [{generated_file, erlang:element(6, Mount), proute@generate@routes:generate( Mount_routes )}, {generated_file, erlang:element(8, Mount), proute@generate@page_input:generate( Mount_routes )}, {generated_file, erlang:element(7, Mount), proute@generate@pages:generate( Mount_routes, Page_modules, erlang:element(10, Mount) )}]}} end ) end ). -file("src/proute.gleam", 70). -spec generate_all(proute@config:config()) -> {ok, list(generated_file())} | {error, proute_error()}. generate_all(Config) -> gleam@result:'try'( begin _pipe = erlang:element(4, Config), gleam@list:try_map(_pipe, fun generate_mount/1) end, fun(Generated) -> {ok, begin _pipe@1 = Generated, gleam@list:flat_map( _pipe@1, fun(Mount) -> erlang:element(2, Mount) end ) end} end ). -file("src/proute.gleam", 50). -spec run_config(proute@config:config()) -> {ok, list(generated_file())} | {error, proute_error()}. run_config(Config) -> gleam@result:'try'( generate_all(Config), fun(Generated) -> gleam@result:'try'( write_all(Generated), fun(Files) -> {ok, Files} end ) end ). -file("src/proute.gleam", 157). -spec find_config_path_from(binary()) -> {ok, binary()} | {error, nil}. find_config_path_from(Directory) -> Path = <>, case simplifile_erl:is_file(Path) of {ok, true} -> {ok, Path}; _ -> Parent = filepath:directory_name(Directory), case Parent =:= Directory of true -> {error, nil}; false -> find_config_path_from(Parent) end end. -file("src/proute.gleam", 150). -spec find_config_path() -> {ok, binary()} | {error, nil}. find_config_path() -> case simplifile:current_directory() of {ok, Directory} -> find_config_path_from(Directory); {error, _} -> {error, nil} end. -file("src/proute.gleam", 59). -spec load() -> {ok, proute@config:config()} | {error, proute@config:config_error()}. load() -> case find_config_path() of {ok, Path} -> case simplifile:read(Path) of {ok, Source} -> proute@config:parse(Source); {error, _} -> {error, {missing_config, Path}} end; {error, _} -> {error, {missing_config, <<"proute.toml"/utf8>>}} end. -file("src/proute.gleam", 45). -spec run() -> {ok, list(generated_file())} | {error, proute_error()}. run() -> gleam@result:'try'( begin _pipe = load(), gleam@result:map_error( _pipe, fun(Field@0) -> {config_error, Field@0} end ) end, fun(Config) -> run_config(Config) end ). -file("src/proute.gleam", 30). -spec main() -> nil. main() -> case run() of {ok, Files} -> _pipe = Files, gleam@list:each( _pipe, fun(File) -> {generated_file, Path, _} = File, gleam_stdlib:println(<<"Generated "/utf8, Path/binary>>) end ); {error, Error} -> gleam_stdlib:println_error(describe_error(Error)), proute@exit:failure() end.