Current section

Files

Jump to
roundabout src roundabout@internal@generate_helpers.erl
Raw

src/roundabout@internal@generate_helpers.erl

-module(roundabout@internal@generate_helpers).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/roundabout/internal/generate_helpers.gleam").
-export([generate_route_helper_body/3, generate_helpers_rec/2]).
-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).
-file("src/roundabout/internal/generate_helpers.gleam", 68).
?DOC(false).
-spec generate_path_helper(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_path_helper(Ancestors, Cont) ->
Function_name_prefix = roundabout@internal@common:generate_function_name(
Ancestors,
erlang:element(2, Cont)
),
Route_function_name = <<Function_name_prefix/binary, "_route"/utf8>>,
Path_function_name = <<Function_name_prefix/binary, "_path"/utf8>>,
Function_arguments = roundabout@internal@common:get_function_arguments(
Ancestors,
erlang:element(2, Cont)
),
This_function_arguments = begin
_pipe = Function_arguments,
_pipe@1 = gleam@list:map(
_pipe,
fun roundabout@internal@parameter:print_name_and_type/1
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
Callee_arguments = begin
_pipe@2 = Function_arguments,
_pipe@3 = gleam@list:map(
_pipe@2,
fun roundabout@internal@parameter:print_name/1
),
gleam@string:join(_pipe@3, <<", "/utf8>>)
end,
Body = begin
_pipe@4 = glam@doc:from_string(
<<<<<<Route_function_name/binary, "("/utf8>>/binary,
Callee_arguments/binary>>/binary,
")"/utf8>>
),
_pipe@5 = glam@doc:append(
_pipe@4,
roundabout@internal@common:pipe_join()
),
glam@doc:append(_pipe@5, glam@doc:from_string(<<"route_to_path"/utf8>>))
end,
glam@doc:concat(
[glam@doc:from_string(
<<<<<<<<"pub fn "/utf8, Path_function_name/binary>>/binary,
"("/utf8>>/binary,
This_function_arguments/binary>>/binary,
") -> String {"/utf8>>
),
glam@doc:nest_docs([{line, 1}, Body], 2),
{line, 1},
glam@doc:from_string(<<"}"/utf8>>),
glam@doc:lines(2)]
).
-file("src/roundabout/internal/generate_helpers.gleam", 105).
?DOC(false).
-spec generate_route_helper_body(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
list(glam@doc:document()),
roundabout@internal@node:info()
) -> list(glam@doc:document()).
generate_route_helper_body(Ancestors, Acc, Info) ->
Ancestor_names = begin
_pipe = Ancestors,
roundabout@internal@ancestors:map(
_pipe,
fun(Info@1) -> erlang:element(2, Info@1) end
)
end,
Params = begin
_pipe@1 = erlang:element(3, Info),
_pipe@2 = gleam@list:filter_map(
_pipe@1,
fun roundabout@internal@common:segment_to_param/1
),
_pipe@3 = gleam@list:map(
_pipe@2,
fun(_capture) ->
roundabout@internal@parameter:qualify_name(
Ancestor_names,
erlang:element(2, Info),
_capture
)
end
),
_pipe@4 = gleam@list:map(
_pipe@3,
fun roundabout@internal@parameter:print_name_qualified/1
),
(fun(Entries) -> case erlang:length(Acc) of
0 ->
Entries;
_ ->
lists:append(Entries, [<<"_"/utf8>>])
end end)(_pipe@4)
end,
Params@1 = case gleam@list:is_empty(Params) of
true ->
<<""/utf8>>;
false ->
<<<<"("/utf8, (gleam@string:join(Params, <<", "/utf8>>))/binary>>/binary,
")"/utf8>>
end,
Params@2 = gleam@string:replace(Params@1, <<"(_)"/utf8>>, <<""/utf8>>),
Type_name = roundabout@internal@common:generate_type_name(Ancestors, Info),
New_line = glam@doc:from_string(<<Type_name/binary, Params@2/binary>>),
Next_acc = case Type_name of
<<""/utf8>> ->
Acc;
_ ->
lists:append(Acc, [New_line])
end,
case roundabout@internal@ancestors:pop(Ancestors) of
{ok, {Next_ancestor, Rest_ancestors}} ->
generate_route_helper_body(Rest_ancestors, Next_acc, Next_ancestor);
_ ->
Next_acc
end.
-file("src/roundabout/internal/generate_helpers.gleam", 38).
?DOC(false).
-spec generate_route_helper(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_route_helper(Ancestors, Cont) ->
Function_name = <<(roundabout@internal@common:generate_function_name(
Ancestors,
erlang:element(2, Cont)
))/binary,
"_route"/utf8>>,
Function_arguments = roundabout@internal@common:get_function_arguments(
Ancestors,
erlang:element(2, Cont)
),
This_function_arguments = begin
_pipe = Function_arguments,
_pipe@1 = gleam@list:map(
_pipe,
fun roundabout@internal@parameter:print_name_and_type/1
),
gleam@string:join(_pipe@1, <<", "/utf8>>)
end,
Body = begin
_pipe@2 = generate_route_helper_body(
Ancestors,
[],
erlang:element(2, Cont)
),
glam@doc:join(_pipe@2, roundabout@internal@common:pipe_join())
end,
glam@doc:concat(
[glam@doc:from_string(
<<<<<<<<"pub fn "/utf8, Function_name/binary>>/binary,
"("/utf8>>/binary,
This_function_arguments/binary>>/binary,
") -> Route {"/utf8>>
),
glam@doc:nest_docs([{line, 1}, Body], 2),
{line, 1},
glam@doc:from_string(<<"}"/utf8>>),
glam@doc:lines(2)]
).
-file("src/roundabout/internal/generate_helpers.gleam", 31).
?DOC(false).
-spec generate_helpers(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_helpers(Ancestors, Node) ->
glam@doc:concat(
[generate_route_helper(Ancestors, Node),
generate_path_helper(Ancestors, Node)]
).
-file("src/roundabout/internal/generate_helpers.gleam", 9).
?DOC(false).
-spec generate_helpers_rec(
roundabout@internal@ancestors:ancestors(roundabout@internal@node:info()),
roundabout@internal@node:node_()
) -> glam@doc:document().
generate_helpers_rec(Ancestors, Node) ->
case gleam@list:is_empty(erlang:element(3, Node)) of
true ->
generate_helpers(Ancestors, Node);
false ->
Next_ancestors = roundabout@internal@ancestors:push(
Ancestors,
erlang:element(2, Node)
),
_pipe = gleam@list:map(
erlang:element(3, Node),
fun(Node@1) -> generate_helpers_rec(Next_ancestors, Node@1) end
),
glam@doc:concat(_pipe)
end.